不向存储过程添加参数

时间:2014-01-07 16:18:53

标签: c# asp.net sql sql-server tsql

这是我的存储过程的签名:

Create Procedure sp_Member_Account_Select_By_User_And_Membership_Year
(
    @Username varchar(150),
   @Membership_Year varchar(10)
)
AS

asp.net c#中的代码

 command.Parameters.Add("@Username", SqlDbType.VarChar,150).Value = vUsername;
 command.Parameters.Add("@Membership_Year", SqlDbType.VarChar,10).Value = "2014";

 SqlDataReader dr;
 dr = command.ExecuteReader();

错误消息:

  

程序或功能   'sp_Member_Account_Select_By_User_And_Membership_Year'预计   参数'@Username',未提供。

我尝试过添加参数的不同方法,包括Addwithvalue,但没有成功。我错过了什么?

2 个答案:

答案 0 :(得分:2)

由于您显然将参数添加到命令中,因此还有两件事可能导致此异常:

  1. 将命令类型设置为CommandType.StoredProcedure

    command.ComandType = CommandType.StoredProcedure;
    
  2. 如果DBNull.Value为空,请将用户名参数设置为vUsername

    command.Parameters.Add("@Username", SqlDbType.VarChar,150).Value = vUsername ?? DBNull.Value;
    

答案 1 :(得分:0)

vUsername可以为空吗?当您需要将null传递给存储过程时,需要传递常量DBNull.Value而不是null

这样的东西
 command.Parameters.Add("@Username", SqlDbType.VarChar,150).Value = 
      (vUsername == null) ? DbNull.Value : (object) vUsername;