C# 使用C在SQL Server中执行Insert命令并返回插入的Id#
我正在使用C#向SQL Server表中插入一些值。实际上,我想插入值并返回上次插入记录的“ID”。我使用以下代码:C# 使用C在SQL Server中执行Insert命令并返回插入的Id#,c#,sql-server,winforms,stored-procedures,C#,Sql Server,Winforms,Stored Procedures,我正在使用C#向SQL Server表中插入一些值。实际上,我想插入值并返回上次插入记录的“ID”。我使用以下代码: string name = txt_name.Text.Trim(); string gender = Gender.Text.Trim(); string citizen = Citizen.Text.Trim(); int IdNo = Convert.ToInt32(idnumber.Text); BUSSINESSACCESS.SENDMESSAGES send = n
string name = txt_name.Text.Trim();
string gender = Gender.Text.Trim();
string citizen = Citizen.Text.Trim();
int IdNo = Convert.ToInt32(idnumber.Text);
BUSSINESSACCESS.SENDMESSAGES send = new BUSSINESSACCESS.SENDMESSAGES();
DataSet dt = send.insertvoucher(name, gender, citizen, IdNo);
业务层
public DataSet insertvoucher(string name, string gender, string citizen, int IdNo)
{
SqlParameter[] par = {
new SqlParameter("@Name", name),
new SqlParameter("@Citizen", citizen),
new SqlParameter("@Emiratesidno", IdNo),
new SqlParameter("@gender", gender),
};
var rowCount = SHJCSQLHELPER.ExecuteScalar(CONNECTIONSTRING, CommandType.StoredProcedure, "[INSERTVOUCHER]", par);
return rowCount;
// return SHJCSQLHELPER.ExecuteDataset(CONNECTIONSTRING, CommandType.StoredProcedure, "[INSERTVOUCHER]", par);
//string mn = "";
}
存储过程
-- Insert statements for procedure here
Insert into Usertable(Name, Citizen, Emiratesidno, gender)
values (@Name, @Citizen, @Emiratesidno, @gender)
SELECT scope_identity() AS int
我正在获取变量rowcount中的值,但我无法返回变量rowcount,因为它表示
无法将类型“object”隐式转换为“system.data.dataset”
选择CAST(scope\u identity()作为int)
rowCount
是装箱整数。更改返回语句和返回类型。例如:选择CAST(scope\u identity()作为int)
rowCount
是装箱整数。更改返回语句和返回类型。例如:Ref:在Execute命令前面加上
(Int32)
scope\u identity()
默认情况下返回一个INT
,无需强制转换
您还可以将存储过程设置为使用OUT参数,并将Scope\u Identity()
分配给该参数,然后调整C以利用该参数
校正
scope\u identity()
返回一个decimal
,而不是int
。如果您的identity
列是int
列,则转换是自动的,不需要强制转换。
我对此有些生疏,因为我在大多数存储过程中都使用了
output
参数,并且没有返回select
语句在Execute命令前面加上(Int32)
scope\u identity()
默认情况下返回一个INT
,无需强制转换
您还可以将存储过程设置为使用OUT参数,并将Scope\u Identity()
分配给该参数,然后调整C以利用该参数
校正
scope\u identity()
返回一个decimal
,而不是int
。如果您的identity
列是int
列,则转换是自动的,不需要强制转换。
我对此有些生疏,因为我在大多数存储过程中都使用了
output
参数,并且没有返回select
语句insertconcert
应该返回DataSet
。方法insertconcert
的返回值类型是DataSet
,但您返回的是对象
。我认为您需要将返回类型更改为int
,然后将rowCount
转换为integerreturn(int)rowCount
和行数的名称
具有误导性,因为您期望id
ExecuteScalar不会返回数据集,所以您需要将方法签名数据集insertconcert更改为int insertconcert。在调用期间还将rowCount强制转换为(int)rowCountreturn@user3377634,哪一行抛出此错误?InsertVoucher
应该返回一个数据集
。方法InsertVoucher
的返回值类型是DataSet
,但您返回的是对象
。我认为您需要将返回类型更改为int
,然后将rowCount
转换为integerreturn(int)rowCount
和行数的名称
具有误导性,因为您期望id
ExecuteScalar不会返回数据集,所以您需要将方法签名数据集insertconcert更改为int insertconcert。在调用期间还将rowCount强制转换为(int)rowCountreturn@user3377634,哪一行抛出此错误?实际上Scope_Identity()返回数值(38,0)在更改返回类型时,我是否必须将数据集更改为intYes,并且我已更正以反映正确的数值类型实际上Scope_Identity()返回数值(38,0)我是否必须在更改返回类型时将数据集更改为intYes,并且我已更正以反映正确的数字类型
var rowCount = (Int32)SHJCSQLHELPER.ExecuteScalar(CONNECTIONSTRING, CommandType.StoredProcedure, "[INSERTVOUCHER]", par);