错误:SqlParameterCollection只接受非空的SqlParameter类型对象,不接受String对象

本文关键字:对象 类型 SqlParameter String 不接受 SqlParameterCollection 错误 | 更新日期: 2023-09-27 18:10:51

public int set(string procName , object[] param)
{
      SqlConnection conn = new SqlConnection(constr);
      conn.Open();
      SqlCommand cmd = new SqlCommand(procName,conn);
      cmd.CommandType = CommandType.StoredProcedure;
      foreach(object o in param)
      {
         cmd.Parameters.Add(o);      // Error
      }
      int res = cmd.ExecuteNonQuery();
      conn.Close();
      return res;
}

值通过调用函数正确传递…函数'set'的第二个参数包含两个字符串值。

即使在ERROR语句中,'o'也包含第一个值"Computer",但如上所述,它表示ERROR。

错误:SqlParameterCollection只接受非空的SqlParameter类型对象,不接受String对象

您需要在您的集合中添加新的SqlParameter,如:

cmd.Parameters.Add(new SqlParameter(o.ToString(), o));

上面的语句只是为了展示如何向命令参数添加参数。我真的不知道为什么你想发送一个参数只有一个值的存储过程,你的方法是接受和object类型数组,如果数组持有SqlParameter那么你可以这样做:

cmd.Parameters.Add((SqlParameter) o);

否则需要指定参数名及其值。

您可以修改您的方法以接受SqlParameter类型对象的数组,然后将它们添加到命令参数中。

尝试更改参数类型。

public int set(string procName , SqlParameter[] param)
        {
              SqlConnection conn = new SqlConnection(constr);
              conn.Open();
          SqlCommand cmd = new SqlCommand(procName,conn);
          cmd.CommandType = CommandType.StoredProcedure;
          foreach(SqlParameter o in param)
          {
             cmd.Parameters.Add(o);      // Error
          }
          int res = cmd.ExecuteNonQuery();
          conn.Close();
          return res;
    })

你可以得到如何创建SqlParameter SqlParameter Constructor

如果你想创建数组:SqlParameter[] parameter = { new SqlParameter(...), new SqlParameter(...), new SqlParameter(...) };