获取运行时错误为“必须声明标量变量@name”

时间:2017-03-15 04:57:52

标签: c# asp.net sql-server

我的运行时错误为“必须声明标量变量@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();
    }
}

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

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

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

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

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

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