日期:2014-05-18  浏览次数:20472 次

此 SqlParameterCollection 中未包含带有 ParameterName“RETURNVALUE”的 SqlParameter
问题是这样的:
通过sqlact类,执行一个sql语句
new SQLAct().RunSql("update users set u_geziid="+gid+",u_shopid="+Shopid+" where u_name=(select g_username from gezi where g_id="+gid+")");

类中的方法如下。  
public int RunSql(string strSql)
  {
  Open();
  ///创建Command
  SqlCommand thisCommand = new SqlCommand(strSql, Conn);
  thisCommand.CommandType = CommandType.Text;
  thisCommand.ExecuteNonQuery();
  return (int)thisCommand.Parameters[RETURNVALUE].Value; ---结果是错在这里“此 SqlParameterCollection 中未包含带有 ParameterName“RETURNVALUE”的 SqlParameter” }

不明白原因,请大家指教

------解决方案--------------------
你执行的 SQL语句确实没有 返回参数 

返回 参数 基本上 是过程中才有的
声明时 带个 out 关键字 

你不就想 确定 是否 执行 了 
可以这样 
C# code

//num 影响行数 
int num = thisCommand.ExecuteNonQuery();

------解决方案--------------------
给你改改你的方法
C# code
 
public Boolean RunSql(string strSql) {

    SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["conStr"]);
    conn.Open();
    SqlCommand cmd = new SqlCommand(sQueryString, conn);
    try
    {

      cmd.ExecuteNonQuery();
      conn.Close();
    }
    catch (System.Exception e) {

      conn.Close();
      return false;
    }
    return true;
  }

------解决方案--------------------
建议看一下参数化查询
你的写法还是拼接SQL语句的方式,.net中提供了参数化方式,可以防止SQL注入而且是SQL语句写起来更简单。
return (int)thisCommand.Parameters[RETURNVALUE].Value;
你的这句代码会从参数集合中找到存储过程的返回值,没有返回值所有报错。给你段示例代码看下:
C# code

public static void Sql_Operation(string userID)
    { 
        using (SqlConnection myConncetion = new SqlConnection(ConfigurationManager.AppSettings["ConnString"]))
        using (SqlCommand myCommand = new SqlCommand("select UserID, UserName, UserPwd from WHERE userID = @userID ", myConncetion))
        {
            try
            {
                //构造参数
                SqlParameter myParameter = new SqlParameter("@userID",SqlDbType.Int,4);
                //为参数赋值
                myParameter.Value = Int32.Parse(userID);
                //将参数加入command对象的参数集合中
                myCommand.Parameters.Add(myParameter);
                myConncetion.Open();
                myCommand.ExecuteNonQuery();
            }
            catch (Exception err)
            {
                throw new Exception("Err info:"+err.Message.ToString())
            }
            finally
            {
                myDataAdapter.Dispose();
                myConncetion.Close();
                myConncetion.Dispose();
            }
        }
    }