[英]Passing a parameter to an sql stored procedure in c#
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."
但据我从这里阅读的示例中了解到,我正在发送带有此代码的参数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
如果要使用 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));
}
}
您忘记添加 prodecure 的名称:
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
这必须工作。
您需要确保您的 SqlCommand 设置为 CommandType.StoredProcedure。
cmd.CommandType = CommandType.StoredProcedure
设置参数有点不同:
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@CARIID", SqlDBType.Int).Value = 110;
您没有完全正确地调用存储过程。 你只需要传递存储过程的名称(不带exec),将命令类型设置为存储过程,然后添加参数:
var command = new SqlCommand("GetIslemIdleri", conn);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@CARIID", 110));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.