【问题标题】:Getting run time error as "Must declare scalar variable @name" [closed]运行时错误为“必须声明标量变量@name”[关闭]
【发布时间】:2017-08-05 16:46:59
【问题描述】:

我收到运行时错误“必须声明标量变量@name”

public partial class UserMainPage : System.Web.UI.Page
{
    string strConnString = ConfigurationManager.ConnectionStrings["FindConnectionString"].ConnectionString;
    string str;
    SqlCommand com;

    protected void Page_Load(object sender, EventArgs e)
    {
       label1.Text = Session["name"].ToString();
       string name = label1.Text;
       SqlConnection con = new SqlConnection(strConnString);
       con.Open();
       str = "select balanceamount from wallet where username LIKE '%'+@name+'%'";

       com = new SqlCommand(str, con);
       SqlDataReader reader = com.ExecuteReader();
       reader.Read();
       walletbalance.Text = reader["balanceamount"].ToString();
       reader.Close();
       con.Close();
    }
}

【问题讨论】:

  • ExecuteReader之前添加SqlParameter查询:com.Parameters.AddWithValue("@name", name)
  • 好吧,您没有为 SQL 查询声明 @name,因此错误消息是正确的。
  • 这是代码转储,不是问题。

标签: c# asp.net sql-server


【解决方案1】:

为了使用SqlCommand中的参数,您应该将它们添加到Parameters字典(see MSDN docs)中:

com.Parameters.Add("@name", "JohnSmith");

%s 移动到字符串值以避免运行时连接也很有意义:

com.Parameters.Add("@name", "%JohnSmith%");

如果你的代码中有一个包含名称的字符串变量(你确实有),那么:

string name = (string) Session["name"];
com.Parameters.Add("@name", $"%{name}%");

【讨论】:

    【解决方案2】:

    感谢使用参数化而不是串联字符串查询的尝试。但是您忘记在执行命令之前将参数添加到命令中。这导致了这里的问题。您可以使用以下代码为指定参数添加值;

    str = "select balanceamount from wallet where username LIKE @name";
    com = new SqlCommand(str, con);
    com.Parameters.AddWithValue(@name, "%" + name + "%"); 
    SqlDataReader reader = com.ExecuteReader();
    // Process with reader
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-14
      相关资源
      最近更新 更多