将参数传递给c#中的sql存储过程

Posted

技术标签:

【中文标题】将参数传递给c#中的sql存储过程【英文标题】:Passing a parameter to an sql stored procedure in c# 【发布时间】: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; 我尝试了十次,没有任何改变,但谢谢。 【参考方案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));

【讨论】:

我尝试了七次,没有任何改变,但谢谢。

以上是关于将参数传递给c#中的sql存储过程的主要内容,如果未能解决你的问题,请参考以下文章

将参数传递给C#中的存储过程

使用引号将参数传递给 SQL Server SP

将 xml 字符串参数传递给 SQL Server 存储过程

将参数传递给C#中的存储过程

SQL Plus 无法使用 Accept 将参数传递给我的存储过程

VBA 将日期参数传递给 SQL Server 存储过程