C# 我想在DB中插入一条记录,然后需要返回一行

C# 我想在DB中插入一条记录,然后需要返回一行,c#,sql,sql-server-2008,return,code-behind,C#,Sql,Sql Server 2008,Return,Code Behind,我想在DB中插入一条记录,然后需要返回一行。我创建了这个查询,但是如何在.csc代码中使用它呢 这是我的问题 @ledgerId numeric(18,0) , @voucherNo varchar(MAX) , @invoiceNo varchar(MAX) , @date datetime , @month datetime , @totalAmount decimal(18,5) , @narration varchar(MAX) , -- @extraDate dateti

我想在DB中插入一条记录,然后需要返回一行。我创建了这个查询,但是如何在.csc代码中使用它呢

这是我的问题

 @ledgerId numeric(18,0) ,
 @voucherNo varchar(MAX) ,
 @invoiceNo varchar(MAX) ,
 @date datetime ,
 @month datetime ,
 @totalAmount decimal(18,5) ,
 @narration varchar(MAX) ,
-- @extraDate datetime ,
 @extra1 varchar(MAX) ,
 @extra2 varchar(MAX) ,
 @suffixPrefixId numeric(18,0) ,
 @voucherTypeId numeric(18,0) 
AS
DECLARE @UpdatedVoucherNo DECIMAL(18,0)

SET @UpdatedVoucherNo = (SELECT ISNULL( MAX(CAST (voucherNo AS NUMERIC(18,0))),0) + 1
 FROM tbl_SalaryVoucherMaster
 WHERE voucherTypeId=@voucherTypeId)

 IF (@UpdatedVoucherNo = @voucherNo )

 INSERT INTO tbl_SalaryVoucherMaster
 (
            /*salaryVoucherMasterId,*/
            ledgerId,
            voucherNo,
            invoiceNo,
            date,
            month,
            totalAmount,
            narration,
            extraDate,
            extra1,
            extra2,
            suffixPrefixId,
            voucherTypeId )
VALUES
 (
            /*@salaryVoucherMasterId, */
            @ledgerId, 
            @voucherNo, 
            @invoiceNo, 
            @date, 
            @month, 
            @totalAmount, 
            @narration, 
            getDate(), 
            @extra1, 
            @extra2,
            @suffixPrefixId,
            @voucherTypeId)

            SELECT SCOPE_IDENTITY() AS [Identity],0 AS [UpdatedVoucherNo]
Command.ExecuteNonQuery;是您需要的,它返回插入和更新数据时受影响的行数

下面是一个使用它的示例

            string connetionString = null;
            SqlConnection cnn ;
            SqlCommand cmd ;
            string sql = null;

            connetionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password";
            sql = "Your SQL Statemnt Here";

            cnn = new SqlConnection(connetionString);

                cnn.Open();
                cmd = new SqlCommand(sql, cnn);
                int rowsAffected = cmd.ExecuteNonQuery();
                if (rowsAffected > 0)
                {
                    //do anything
                }
                cmd.Dispose();
                cnn.Close();
                MessageBox.Show (" ExecuteNonQuery in SqlCommand executed !!");

更多信息

一种方法是将@voucheno修改为输出参数,并向查询中添加新的输出参数以返回SCOPE_IDENTITY的值

并修改最后一条SELECT语句以设置@ScopeIdentity参数的值

SELECT @ScopeIdentity = SCOPE_IDENTITY()
然后使用SqlCommand.ExecuteNonQuery执行查询,完成后,从输出参数中读取值

using (SqlCommand command = new SqlCommand(connection, commandText))
{
    int rowsAffected = command.ExecuteNonQuery();
    if (rowsAffected > 0)
    {
        var voucherNo = (string)command.Parameters["@voucherNo].Value;
        var identity = (decimal)command.Parameters["@ScopeIdentity"].Value;
    }
}

你知道答案吗?不,我只想在表中插入一个数据,需要返回select语句中的列。首先我想插入,然后我需要在select语句中获取列的值。我得到了查询,但我想知道如何在代码中实现它。对于插入,我需要ExecuteOnQuery。。对于返回一行,我使用了DataAdapter,我想同时使用它。。但是它不起作用。什么意思,返回列?是指插入的数据吗?然后使用Select语句和SqlDataReader
using (SqlCommand command = new SqlCommand(connection, commandText))
{
    int rowsAffected = command.ExecuteNonQuery();
    if (rowsAffected > 0)
    {
        var voucherNo = (string)command.Parameters["@voucherNo].Value;
        var identity = (decimal)command.Parameters["@ScopeIdentity"].Value;
    }
}