问题描述
|
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到变量中?谢谢
解决方法
OUTPUT子句?
string query = \"INSERT INTO SocialGroup (created_by_fbuid)
OUTPUT INSERTED.IDCol --use real column here
VALUES (@FBUID)\";
...
int lastId = (int)command.ExecuteScalar();
,您可以使用ExecuteScalar从Sqlcommand获取最后一个值。
scope_identity()函数比@@ identity安全。
,如果您的服务器支持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();
}
}
,就个人而言,我将重新编写代码以使用“参数”。您可以使用InputOutput
参数或Output
参数。但是,在SQL中使用返回值也可以。
完整的示例可以在MSDN上找到。
我也将使用Scope_Identity()
而不是@@Identity
,这将确保您获得与当前交易相关的ID。可在此处找到有关Scope_Identity的详细信息。
,您可以尝试ExecuteScalar获取LastID值。
,我建议使用存储过程来执行此操作。您可以为其指定一个“ 8”参数,该参数可用于将ID值返回给您的应用。
,cmd = new SqlCommand(\"Insert into table values (1,2,3); SELECT SCOPE_IDENTITY()\",conn);
lastRecord = cmd.ExecuteScalar().ToString();
,仅对查询使用“ 10”,并使用“ 11”获得最大值。
,SqlCommand command = new SqlCommand(\"select max(id) from SocialGroup \",connection);
int lastId = (int)command.ExecuteScalar();