2011-03-23 129 views
4
 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));我需要帮助,提前谢谢。将参数传递给c中的sql存储过程#

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

SELECT ID 
FROM TBLP1ISLEM 
WHERE [email protected] 
END 
+0

您是否指定了cmd.CommandType = CommandType.StoredProcedure; – WorldIsRound 2011-03-23 15:45:13

+0

我试了十次,没有什么改变,但谢谢。 – Bastardo 2011-03-23 15:49:04

回答

3

如果你想使用一个SqlCommand调用存储过程中,不要执行EXEC GetIslemIdleri,只执行GetIslemIdleri,设置CommandTypeCommandType.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)); 
    } 
} 
+0

我试了八次,没有什么改变,但谢谢。 – Bastardo 2011-03-23 15:48:19

+0

@EmreVeriyaz - 那么你的代码中有其他地方出现错误,我刚刚在本地进行了测试(在MS SQL 2008 R2上),它工作正常。 – Mormegil 2011-03-23 16:12:30

+0

谢谢你试图帮助,我正在分析我的代码。 – Bastardo 2011-03-23 16:21:03

0

设置参数有点differenty:

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

我试过了,但同样的错误出来了。 – Bastardo 2011-03-23 15:51:42

+0

HI,阅读下面,我发布了一个新的解决方案。 – 2011-03-24 14:41:44

2

你需要确保你的SqlCommand设置为CommandType.StoredProcedure。

cmd.CommandType = CommandType.StoredProcedure 
+0

我试了九次,没有什么改变,但谢谢。 – Bastardo 2011-03-23 15:48:36

0

你不太调用存储过程正确。你只需要通过存储过程(不执行)的名称,设置命令类型的存储过程,然后添加参数:

var command = new SqlCommand("GetIslemIdleri", conn); 
command.CommandType = CommandType.StoredProcedure; 

command.Parameters.Add(new SqlParameter("@CARIID", 110)); 
+0

我试了七次,没有什么改变,但谢谢。 – Bastardo 2011-03-23 15:47:55

2

你忘了加上prodecure`s名称:

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 

这有工作。

+0

感谢Mitja。我解决了它实际上是由数据库中的空值引起的问题,这导致读者设置为空,并且发生错误。 – Bastardo 2011-03-24 14:49:54