我正在创建一个网站,我需要在其中调用存储过程,但显示以下错误消息
过程需要未提供的参数
我的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',这是未提供的。
答案 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();
}