C# 使用C在SQL Server中执行Insert命令并返回插入的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

我正在使用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 = 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”

  • 您没有强制转换,而是将列名别名为int

    使用:
    选择CAST(scope\u identity()作为int)

  • rowCount
    是装箱整数。更改返回语句和返回类型。例如:

  • 返回(int)行计数

    这将是您所需的ID

    参考:

  • 您没有强制转换,而是将列名别名为int

    使用:
    选择CAST(scope\u identity()作为int)

  • rowCount
    是装箱整数。更改返回语句和返回类型。例如:

  • 返回(int)行计数

    这将是您所需的ID


    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
    转换为integer
    return(int)rowCount
    行数的名称
    具有误导性,因为您期望
    id
    ExecuteScalar不会返回数据集,所以您需要将方法签名数据集insertconcert更改为int insertconcert。在调用期间还将rowCount强制转换为(int)rowCountreturn@user3377634,哪一行抛出此错误?
    InsertVoucher
    应该返回一个
    数据集
    。方法
    InsertVoucher
    的返回值类型是
    DataSet
    ,但您返回的是
    对象
    。我认为您需要将返回类型更改为
    int
    ,然后将
    rowCount
    转换为integer
    return(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);