存储过程参数错误c#

时间:2016-07-01 12:19:18

标签: c# sql-server stored-procedures

我正在创建一个网站,我需要在其中调用存储过程,但显示以下错误消息

  

过程需要未提供的参数

我的C#代码:

SqlCommand md = new SqlCommand("SPSelcsclass");  // select charge,shortclass from class where class=@class  
md.CommandType = CommandType.StoredProcedure;
md.Connection = con;

SqlParameter paam;
paam = new SqlParameter("@class", "SLEEPER CLASS");
paam.Direction = ParameterDirection.Input;
paam.DbType = DbType.String;
cmd.Parameters.Add(paam);

con.Open();

SqlDataReader sdr = md.ExecuteReader();

while (sdr.Read())
{
    lb11.Text = sdr["charge"].ToString();
    lb2.Text = sdr["shortclass"].ToString();
}

SQL Server存储过程:

create procedure SPSelcsclass  
    @class nvarchar(500)  
as  
begin  
    select charge, shortclass 
    from class 
    where class = @class  
end

错误:

  

程序或功能' SPSelcsclass'期望参数' @ class',这是未提供的。

2 个答案:

答案 0 :(得分:1)

这是您的违规行(在下面标有**)。您似乎有两个命令,并且您将参数设置为命令cmd,而不是md。将md.Parameters.Add(paam);替换为SqlCommand md = new SqlCommand("SPSelcsclass");//select charge,shortclass from class where class=@class md.CommandType = CommandType.StoredProcedure; md.Connection = con; SqlParameter paam; paam = new SqlParameter("@class", "SLEEPER CLASS"); paam.Direction = ParameterDirection.Input; paam.DbType = DbType.String; **cmd.Parameters.Add(paam);** con.Open(); SqlDataReader sdr = md.ExecuteReader(); while (sdr.Read()) { lb11.Text = sdr["charge"].ToString(); lb2.Text = sdr["shortclass"].ToString(); }

foreach($stats as $key => $s){
   $user .= '<td>'.$s->user.'</td>';
   $number .= '<td>'.$s->number.'</td>';
   $type .= '<td>'.$s->type.'</td>';
 }

答案 1 :(得分:0)

您在代码中创建了两个不同的SqlCommand对象,而您只需要一个。这会导致您将参数添加到与您正在呼叫的命令不同的命令。

您正在呼叫SqlCommand cmd,但您正在向SqlCommand md添加参数,我们甚至不知道它来自何处。

你创建参数的方式对我来说很安静。我相信你可以省略很多它并简单地完成所有代码:

            using (SqlConnection connection = con)
        {
            SqlCommand command = new SqlCommand("SPSelcsclass", connection);  // select charge,shortclass from class where class=@class  
            command.Parameters.AddWithValue("class", "SLEEPER CLASS");

            connection.Open();

            SqlDataReader sdr = command.ExecuteReader();
            while(sdr.Read())
            {
                lb11.Text = sdr["charge"].ToString();
                lb2.Text = sdr["shortclass"].ToString();
            }

            connection.Close();
        }