当前位置: 代码迷 >> ASP.NET >> 此 SqlParameterCollection 中未包含带有 ParameterName“RETURNVALUE”的 SqlParameter,该如何处理
  详细解决方案

此 SqlParameterCollection 中未包含带有 ParameterName“RETURNVALUE”的 SqlParameter,该如何处理

热度:4500   发布时间:2013-02-25 00:00:00.0
此 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();            }        }    }
  相关解决方案