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,但记录被正确添加
问题出在哪里?
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());