ExecuteScalar没有';t返回第一行的第一列

本文关键字:一行 没有 一列 返回 ExecuteScalar | 更新日期: 2023-09-27 18:19:29

我有这个模块

   strSQL = "Insert Into TblInsurancePersonel (CompId,PersonelNo,FirstName,LastName) ";
   strSQL = strSQL + " Values (@CompId,@PersonelNo,@FirstName,@LastName)";
   using (SqlConnection myConnection = new SqlConnection(AppConfiguration.ConnectionStringName))
   {
      Helpers helpers = new Helpers();
      myConnection.ConnectionString = helpers.GetConnectionString(myUser.ServerName, myConnection.ConnectionString);
      using (SqlCommand myCommand = new SqlCommand(strSQL, myConnection))
      {
          myCommand.Parameters.AddWithValue("@CompId", insurPersonel.CompId);
          myCommand.Parameters.AddWithValue("@PersonelNo", insurPersonel.PersonelNo);             
          myCommand.Parameters.AddWithValue("@FirstName", insurPersonel.FirstName);
          myCommand.Parameters.AddWithValue("@LastName", insurPersonel.LastName);
          myConnection.Open();
          int i= Convert.ToInt32(myCommand.ExecuteScalar());
                myConnection.Close();

TblInsurancePersonel中的字段是"Id,CompId,PersonelNo,FirstName,LastName",Id是一个标识,所以每当添加新记录时,我都希望有它的值(我的意思是我可以有新记录的标识)。但它一直返回值0,但记录被正确添加

问题出在哪里?

ExecuteScalar没有';t返回第一行的第一列

INSERT不返回任何数据;它不呈现第一行的第一列。。。为此,您需要SELECT

也许你想要:

SELECT SCOPE_IDENTITY()

在CCD_ 3。还有一种OUTPUT语法可以做到这一点:

INSERT ...
OUTPUT INSERTED.Id
VALUES ...

使用ExecuteNonQuery可以得到受影响的行数。

int i= myCommand.ExecuteNonQuery();

编辑

ExecuteScalar不返回第一行的第一列

也许您想检索新的主键。

您甚至可以将ExecuteScalar用于插入查询,但必须附加一个SELECT-语句。例如,如果您想要选择新创建的标识值,这将非常有用。

例如:

string sql = @"Insert Into TblInsurancePersonel (CompId,PersonelNo,FirstName,LastName)
               Values (@CompId,@PersonelNo,@FirstName,@LastName);
               SELECT CAST(scope_identity() AS int)";
// ...
int newIdentity = Convert.ToInt32(myCommand.ExecuteScalar());