我在MVC 4中使用C#将一些值插入到一个SQL表中。实际上,我想插入值并返回最后插入的记录的“ID”。我使用以下代码。
public class MemberBasicData
{
public int Id { get; set; }
public string Mem_NA { get; set; }
public string Mem_Occ { get; set; }
}
ID在插入时在数据库中自动递增。
public int CreateNewMember(string Mem_NA, string Mem_Occ )
{
using (SqlConnection con=new SqlConnection(Config.ConnectionString))
{
using(SqlCommand cmd=new SqlCommand("INSERT INTO Mem_Basic(Mem_Na,Mem_Occ) VALUES(@na,@occ)",con))
{
cmd.Parameters.AddWithValue("@na", Mem_NA);
cmd.Parameters.AddWithValue("@occ", Mem_Occ);
con.Open();
int modified = cmd.ExecuteNonQuery();
if (con.State == System.Data.ConnectionState.Open) con.Close();
return modified;
}
}
}
我知道ExecuteNonQuery
表示影响该行的数字。
int modified = (int)cmd.ExecuteScalar();
但是它不工作。请帮助我解决这个问题。并且是否有任何代码像cmd.ExecuteInsertAndGetID()
(不工作与我的代码)。
8条答案
按热度按时间ztmd8pv51#
下面的解决方案将适用于sql server 2005及更高版本。您可以使用output来获取所需字段。您可以编写要返回的键来代替id。操作如下
适用于SQL Server 2005及更高版本
适用于以前的版本
aiqt4smr2#
将查询更改为
这将返回最后插入的ID,然后可以使用
ExecuteScalar
获取该IDqojgxg4l3#
SQL Server存储过程:
C#代码:
希望这些对你有帮助......
你也可以用这个如果你想...
fcy6dtqo4#
uajslkp65#
这将返回仅插入到当前范围内的标识值
这并不局限于特定的作用域,因此这将返回标识列的最新值,并且不一定是来自同一作用域的标识值。
e4yzc0pl6#
如果您使用EF:
设置名称值:
您只需保存它,您将从数据库中获得ID。
hwazgwia7#
可以在插入查询链接中使用
OUTPUT Inserted.Id
:将响应存储在result变量中,然后读取result[0].Id,或者可以使用ExecuteSingle并直接读取result.Id来访问插入的id或任何其他列数据。
k5ifujac8#
范围_标识:返回插入到同一作用域中标识列的最后一个标识值。有关详细信息,请参阅http://technet.microsoft.com/en-us/library/ms190315.aspx