无法使用ADO获取Insert命令的记录Id.NET.NET 4.0



我正在研究ADO。NET与NET Framework 4.0Insert命令。我需要返回已创建记录的主记录。我已经实现了以下代码,但得到了空值。我想确保我得到正确的Id,而不仅仅是最近创建的Id,因为这可能是多个用户试图同时添加记录的情况

private bool InsertData()
{
bool isRecordCreated = false;
try
{
using (SqlCommand cmd = new SqlCommand(InsertScript(), dbConnection))
{

cmd.Parameters.Add("@UserProfileStatus", SqlDbType.Int).Value = UserProfiles.UserProfileStatus;
cmd.Parameters.Add("@UserProfileAccount", SqlDbType.VarChar).Value = UserProfiles.UserProfileAccount;
cmd.Parameters.Add("@UserProfileTimeStamp", SqlDbType.DateTime).Value = UserProfiles.UserProfileTimeStamp;
cmd.Parameters.Add("@UserProfileId", SqlDbType.Int).Direction = ParameterDirection.Output;
dbConnection.Open();
cmd.ExecuteNonQuery();
string id = cmd.Parameters["@UserProfileId"].Value.ToString(); // need help here.....
}              
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
if (dbConnection != null)
{
dbConnection.Close();
}
}
return isRecordCreated;
}
private string InsertScript()
{
string script = string.Empty;
script = "INSERT INTO [dbo].[UserProfile]([UserProfileStatus],[UserProfileAccount],[UserProfileTimeStamp]) " +
"VALUES (@UserProfileStatus, @UserProfileAccount, @UserProfileTimeStamp)";
return script;
}

您只需要将这一行添加到以前的脚本中

script = @"INSERT INTO [dbo].[UserProfile]([UserProfileStatus], 
[UserProfileAccount],[UserProfileTimeStamp]) 
VALUES (@UserProfileStatus, @UserProfileAccount,  
@UserProfileTimeStamp);
SELECT SCOPE_IDENTITY();";

然后使用ExecuteScalar删除输出参数来执行查询。SCOPE_IDENTITY将返回在当前连接上生成的下一个IDENTITY值。因此,它将独立于其他用户正在做的

int id = cmd.ExecuteScalar();

注意脚本的第一部分和第二部分是如何通过添加分号来分隔的。这种技术被称为";Batch Sql语句";并且由Sql Server 支持

最新更新