【问题标题】:I want to insert a record in DB and then need to return a row我想在数据库中插入一条记录,然后需要返回一行
【发布时间】:2013-04-16 03:28:27
【问题描述】:

我想在数据库中插入一条记录,然后需要返回一行。我创建了查询,但如何在 .cs(C# 代码)中使用它

这是我的查询

 @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]

【问题讨论】:

  • 你知道答案吗?

标签: c# sql sql-server-2008 return code-behind


【解决方案1】:

您想要做的一种方法是将@voucherNo 修改为OUTPUT 参数,并在您的查询中添加一个新的OUTPUT 参数以返回SCOPE_IDENTITY() 的值。

@voucherNo varchar(max)
@ScopeIdentity numeric(38,0)

并修改最后的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;
    }
}

【讨论】:

    【解决方案2】:

    Command.ExecuteNonQuery(); 是你需要的,它返回插入和更新数据时受影响的行数(int),

    这是一个使用它的例子,

                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 !!");
    

    更多信息here

    【讨论】:

    • 不,我只想向表中插入数据并且需要返回“select”语句中的列
    • 首先我想插入然后我需要在 select 语句中获取列的值我得到了查询,但我想知道如何在代码上实现它。对于插入,我需要 executeNonquery.. 并返回一行,我使用了 dataAdaptor,我想同时使用它.. 但它不起作用
    • 什么意思,返回列?
    • 你的意思是,你插入的数据?
    • 然后使用Select 语句和SqlDataReader
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    相关资源
    最近更新 更多