【问题标题】:Passing a parameter to an sql stored procedure in c#将参数传递给c#中的sql存储过程
【发布时间】:2011-07-21 10:29:17
【问题描述】:
        string commandGetIslemIdleri = ("EXEC GetIslemIdleri");

        cmd = new SqlCommand(commandGetIslemIdleri, sqlConn);
        cmd.Parameters.Add(new SqlParameter("@CARIID", 110));

        using (var reader = cmd.ExecuteReader()) //error occurs here
        {
            while (reader.Read())
            {
                islemidleri.Add(reader.GetInt32(0));

            }

        }

上面是我尝试编写的代码,以使用参数CARIID 调用下面的存储过程,该参数是一个整数。当我运行代码时发生错误并说"Procedure or function 'GetIslemIdleri' expects parameter '@CARIID', which was not supplied." 但据我从here 阅读的示例了解,我正在使用此代码cmd.Parameters.Add(new SqlParameter("@CARIID", 110)); 发送参数,我需要帮助,提前谢谢您。

ALTER PROCEDURE [dbo].[GetIslemIdleri] 
    @CARIID int 
AS
BEGIN
SET NOCOUNT ON;

SELECT ID
FROM TBLP1ISLEM
WHERE TBLP1ISLEM.CARI_ID=@CARIID
END

【问题讨论】:

  • 你指定了 cmd.CommandType = CommandType.StoredProcedure;
  • 我尝试了十次,没有任何改变,但谢谢。

标签: c# stored-procedures parameter-passing sqlcommand


【解决方案1】:

如果要使用SqlCommand调用存储过程,不要执行EXEC GetIslemIdleri,只执行GetIslemIdleri,将CommandType设置为CommandType.StoredProcedure

cmd = new SqlCommand("GetIslemIdleri", sqlConn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@CARIID", 110));

using (var reader = cmd.ExecuteReader()) //error occurs here
{
    while (reader.Read())
    {
        islemidleri.Add(reader.GetInt32(0));
    }
}

【讨论】:

  • 我尝试了八次,没有任何改变,但谢谢。
  • @EmreVeriyaz - 然后你的代码中的其他地方有错误,我刚刚在本地测试过它(在 MS SQL 2008 R2 上),它工作正常。
  • 现在也可以试试设置参数的简写cmd.Parameters.AddWithValue("@parameter", someValue);
【解决方案2】:

您忘记添加产品名称:

cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "GetIslemIdleri";
cmd.Parameters.Add("@CARIID", SqlDBType.Int).Value = 110;

并执行以下程序:

CREATE PROCEDURE [dbo].[GetIslemIdleri] 
(
    @CARIID int 
)
AS
BEGIN
SET NOCOUNT ON;    
SELECT ID FROM TBLP1ISLEM WHERE TBLP1ISLEM.CARI_ID = @CARIID
END

这必须有效。

【讨论】:

  • 感谢米贾。我解决了它实际上是由我的数据库中的空值引起的问题,这导致读取器设置为空并且发生错误。
【解决方案3】:

您需要确保将 SqlCommand 设置为 CommandType.StoredProcedure。

cmd.CommandType = CommandType.StoredProcedure

【讨论】:

    【解决方案4】:

    设置参数有点不同:

    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@CARIID", SqlDBType.Int).Value = 110;
    

    【讨论】:

      【解决方案5】:

      您没有完全正确地调用存储过程。只需传递存储过程的名称(不带exec),将命令类型设置为存储过程,然后添加参数即可:

      var command = new SqlCommand("GetIslemIdleri", conn);
      command.CommandType = CommandType.StoredProcedure;
      
      command.Parameters.Add(new SqlParameter("@CARIID", 110));
      

      【讨论】:

      • 我尝试了七次,没有任何改变,但谢谢。
      猜你喜欢
      • 2011-07-22
      • 2014-05-17
      • 1970-01-01
      • 2018-07-06
      • 2016-04-05
      相关资源
      最近更新 更多