【问题标题】:stored procedure parameter error c#存储过程参数错误c#
【发布时间】:2016-07-01 21:35:18
【问题描述】:

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

过程需要未提供的参数

我的 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”,但未提供该参数。

【问题讨论】:

  • 你在这一行中使用了cmd insted of md - cmd.Parameters.Add(paam); 替换为md.Parameters.Add(paam); 将起作用

标签: c# sql-server stored-procedures


【解决方案1】:

这是您的违规行(下面标有 **)。似乎您有两个命令,并且您将参数设置为命令 cmd,而不是 md。将cmd.Parameters.Add(paam); 替换为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();
                }

【讨论】:

    【解决方案2】:

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

    您正在调用SqlCommand cmd,但您正在向SqlCommand md 添加参数,我们甚至不知道它来自哪里。

    你创建参数的方式对我来说很奇怪。我相信您可以省略很多 quiet 并将所有代码简化为:

                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();
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2013-12-02
      • 2013-04-12
      • 2011-09-06
      相关资源
      最近更新 更多