我在我的表中插入了一行,我希望得到它的ID,并加上一个int并插入该行。
但我不知道如何获得它的身份。
这是插入代码:
objCommand.Connection = objConnection;
objCommand.CommandText = "INSERT INTO Moin " +
" (Title, TotalID, Code ) " +
"VALUES (@Title , @TotalID, @Code )";
答案 0 :(得分:1)
objCommand.Connection = objConnection;
objCommand.CommandText = "INSERT INTO Moin " +
" (Title, TotalID, Code ) " +
"VALUES (@Title , @TotalID, @Code ) SELECT SCOPE_IDENTITY()";
object id = objCommand.ExecuteScalar();
答案 1 :(得分:1)
尝试在查询中使用OUTPUT
clause SQL Server - 它可以返回任何刚插入的值(这里我假设您的列被称为ID
- 根据需要进行调整):
objCommand.Connection = objConnection;
objCommand.CommandText = "INSERT INTO Moin(Title, TotalID, Code ) " +
"OUTPUT Inserted.ID " +
"VALUES (@Title , @TotalID, @Code ); "
然后像这样执行:
int result = (int)objCommand.ExecuteScalar();
由于您只返回一行和一列(只是INT),因此您可以使用.ExecuteScalar()
从INSERT
语句中检索该值。
使用OUTPUT
子句,您可以返回刚刚插入的任何值 - 而不仅仅是标识列。因此,您还可以使用默认值或任何需要返回由数据库填充的值。如果您返回多个值,则需要使用数据阅读器全部阅读 - ExecuteScalar()
仅适用于单个值。
但是,正如Anders正确提到的那样 - 使用像Entity Framework这样的ORM可以自动完成所有这些操作,而且您不必再处理这些原始SQL命令....
答案 2 :(得分:0)
在字符串中构建SQL命令应被视为传统技术。如果您使用Entity Framework或linq-to-sql,则会自动为您处理id的检索。
使用纯SQL,使用SCOPE_IDENTITY()
函数检索插入元素的id。