将参数传递给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存储过程的主要内容,如果未能解决你的问题,请参考以下文章
将 xml 字符串参数传递给 SQL Server 存储过程