代码之家  ›  专栏  ›  技术社区  ›  K.Z

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

  •  0
  • K.Z  · 技术社区  · 2 年前

    我正在处理ADO。NET与NET Framework 4.0 Insert

    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;
        }
    
    1 回复  |  直到 2 年前
        1
  •  2
  •   Steve    2 年前

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

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

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

    int id = cmd.ExecuteScalar();
    

    Batch Sql Statements “并受Sql Server支持