public static void CreateSocialGroup(string FBUID)
{
string query = "INSERT INTO SocialGroup (created_by_fbuid) VALUES (@FBUID); SELECT @@IDENTITY AS LastID";
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@FBUID", FBUID);
connection.Open();
command.ExecuteNonQuery();
}
}
这是正确的方法吗?我如何将LastID输入变量?感谢
答案 0 :(得分:26)
OUTPUT子句?
string query = "INSERT INTO SocialGroup (created_by_fbuid)
OUTPUT INSERTED.IDCol --use real column here
VALUES (@FBUID)";
...
int lastId = (int)command.ExecuteScalar();
答案 1 :(得分:10)
您可以使用ExecuteScalar从Sqlcommand获取最后一个值。
scope_identity()函数比@@ identity更安全。
答案 2 :(得分:8)
如果您的服务器支持OUTPUT clause
,您可以尝试使用此代码:
public static void CreateSocialGroup(string FBUID)
{
string query = "INSERT INTO SocialGroup (created_by_fbuid) OUTPUT INSERTED.IDENTITYCOL VALUES (@FBUID)";
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@FBUID", FBUID);
connection.Open();
var _id = command.ExecuteScalar();
}
}
答案 3 :(得分:5)
就个人而言,我会重新编写代码以使用参数。您可以使用InputOutput
参数或Output
参数。但是,在SQL中使用返回值也可以。
关于此can be found on MSDN的完整示例。
我还会使用Scope_Identity()
而不是@@Identity
,这样可以确保您会显示与当前交易相关的ID。有关Scope_Identity can be found here的详细信息。
答案 4 :(得分:3)
你可以尝试使用ExecuteScalar来获取LastID值。
答案 5 :(得分:2)
我建议使用存储过程来执行此操作。您可以为其指定一个OUTPUT
参数,您可以使用该参数将ID值返回给您的应用。
答案 6 :(得分:0)
cmd = new SqlCommand("Insert into table values (1,2,3); SELECT SCOPE_IDENTITY()", conn);
lastRecord = cmd.ExecuteScalar().ToString();
答案 7 :(得分:-3)
仅对查询使用Stored Procedure
,并使用SCOPE_IDENTITY
获取最大值。
答案 8 :(得分:-16)
SqlCommand command = new SqlCommand("select max(id) from SocialGroup ", connection);
int lastId = (int)command.ExecuteScalar();