为了账号安全,请及时绑定邮箱和手机立即绑定

在C#中使用存储过程输出参数

在C#中使用存储过程输出参数

翻过高山走不出你 2019-08-13 14:43:16
在C#中使用存储过程输出参数我在将输出参数从Sql Server存储过程返回到C#变量时遇到问题。我已经阅读了有关此内容的其他帖子,不仅在这里,而且在其他网站上,我无法让它工作。这是我现在拥有的。目前我只是想打印回来的价值。以下代码返回null值。我试图返回的是主键。我尝试过使用@@IDENTITY和SCOPE_INDENTITY()(即SET @NewId = SCOPE_IDENTITY())。存储过程:CREATE PROCEDURE usp_InsertContract    @ContractNumber varchar(7),     @NewId int OUTPUT ASBEGIN     INSERT into [dbo].[Contracts] (ContractNumber)         VALUES (@ContractNumber)     Select @NewId = Id From [dbo].[Contracts] where ContractNumber = @ContractNumberEND打开数据库:pvConnectionString = "Server = Desktop-PC\\SQLEXPRESS; Database = PVDatabase; User ID = sa;     PASSWORD = *******; Trusted_Connection = True;";try{     pvConnection = new SqlConnection(pvConnectionString);     pvConnection.Open();}catch (Exception e){     databaseError = true;}执行命令:pvCommand = new SqlCommand("usp_InsertContract", pvConnection);pvCommand.Transaction = pvTransaction;pvCommand.CommandType = CommandType.StoredProcedure;    pvCommand.Parameters.Clear();pvCommand.Parameters.Add(new SqlParameter("@ContractNumber", contractNumber));SqlParameter pvNewId = new SqlParameter();pvNewId.ParameterName = "@NewId";pvNewId.DbType = DbType.Int32;pvNewId.Direction = ParameterDirection.Output;pvCommand.Parameters.Add(pvNewId);try{     sqlRows = pvCommand.ExecuteNonQuery();     if (sqlRows > 0)         Debug.Print("New Id Inserted =  ",              pvCommand.Parameters["@NewId"].Value.ToString());      }     catch (Exception e)     {         Debug.Print("Insert Exception Type: {0}", e.GetType());         Debug.Print("  Message: {0}", e.Message);     }}
查看完整描述

3 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

存储过程.........

CREATE PROCEDURE usp_InsertContract    @ContractNumber varchar(7)ASBEGIN

    INSERT into [dbo].[Contracts] (ContractNumber)
        VALUES (@ContractNumber)

    SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]END

C#

pvCommand.CommandType = CommandType.StoredProcedure;pvCommand.Parameters.Clear();pvCommand.Parameters.Add(new SqlParameter("@ContractNumber", contractNumber));object uniqueId;int id;
    try
    {
    uniqueId = pvCommand.ExecuteScalar();
     id = Convert.ToInt32(uniqueId);
    }
    catch (Exception e)
    {
        Debug.Print("  Message: {0}", e.Message);
    }}

编辑: “我仍然得到一个DBNull值....对象不能从DBNull转换为其他类型。明天我会再次接受这个。我已经完成了另一份工作,”

我相信SQL表中的Id列不是标识列。


查看完整回答
反对 回复 2019-08-13
  • 3 回答
  • 0 关注
  • 594 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信