编程语言
首页 > 编程语言> > c#-过程或函数“”期望参数“”未提供

c#-过程或函数“”期望参数“”未提供

作者:互联网

这个问题已经在这里有了答案:            >            Procedure expects parameter which was not supplied                                    10个
我很烦人的似乎是一个非常“受欢迎”的错误.但是,就我而言,我正在提供期望的参数,并且它肯定有一个值,所以我很困惑.这是我的代码:

public static DataTable MyDataTable(string pd, bool showAll)
{
    DataTable results = new DataTable("PD results");

    string Conn = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;

    using (SqlConnection connection = new SqlConnection(Conn))
    {
        SqlCommand cmd = new SqlCommand("dbo.MyProcedure", connection);

        SqlParameter pdParam = new SqlParameter("@i_user", SqlDbType.VarChar);
        pdParam.Value = pd;
        cmd.Parameters.Add(pdParam);

        if (showAll) 
            cmd.Parameters.AddWithValue("@i_ShowALL", (int)1);
        else 
            cmd.Parameters.AddWithValue("@i_ShowALL", (int)0);

        SqlDataAdapter da = new SqlDataAdapter(cmd);

        try
        {
            da.Fill(results);
        }
        catch (Exception ex) 
        {
            string error = ex.Message;
        }
     }

     return results;
}

我已经遍历了代码,并且错误发生在参数@i_user上.但是,当我添加参数时,它具有一个值,并且在查看SqlDataAdapter>时已确认此值.选择命令>参数>非公共成员>项> [0] {@i_user}>基地>值.

尽管参数提供了varchar值,但还是出现了错误

Procedure or function ‘dbo.MyProcedure’ expects parameter ‘@i_user’ which is not supplied

我究竟做错了什么?

解决方法:

错误的原因是SqlCommand类需要纯文本SQL.
分配存储过程名称(在您的情况下为“ dbo.MyProcedure”)时,请添加

  ... 
  // Do not forget to Dispose IDisposable instances
  using (SqlCommand cmd = new SqlCommand("dbo.MyProcedure", connection)) {
    // cmd.CommandText is a stored procedure name, not a plain text SQL 
    cmd.CommandType = CommandType.StoredProcedure;
     ...
  }

标签:sql,c,sql-server,stored-procedures
来源: https://codeday.me/bug/20191121/2050425.html