我想用select语句来选择数据库中我需要的记录,但是where语句中的列名是由DropDownList所选的项提供的,是变化的,而且一定要这样。而列名的值是由TextBox输入的。我的代码如下:
private void Button1_Click(object sender, System.EventArgs e)
{
  string xiang,zhi;
  xiang=this.DropDownListxiang.SelectedItem.Text;
  zhi=this.TextBoxzhi.Text;
  if (this.DropDownListlei.SelectedItem.Text=="化学元素")
    {
    SqlConnection MyConnection=new SqlConnection("server=(local)\\HJHSQL;database=Materials;uid=hjh;pwd=911144");   string SelectCommand="SELECT * From Elements Where xiang=zhi";
   SqlCommand MyCommand=new SqlCommand(SelectCommand,MyConnection);
   MyCommand.Connection.Open();
   SqlDataReader dr=MyCommand.ExecuteReader();
   this.DataGrid1.DataSource=dr;
    }
}
错误提示:
列名 'xiang' 无效。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 列名 'xiang' 无效。源错误: 
行 129: SqlCommand MyCommand=new SqlCommand(SelectCommand,MyConnection);
行 130: MyCommand.Connection.Open();
行 131: SqlDataReader dr=MyCommand.ExecuteReader();
行 132: this.DataGrid1.DataSource=dr;
行 133: }
 源文件: c:\inetpub\wwwroot\materialdb\chuji.aspx.cs    行: 131 
我该怎样该呢?

解决方案 »

  1.   

    do you mean (susceptiable to SQL inject attack):string SelectCommand= String.Format("SELECT * From Elements Where {0} = '{1}'",xiang,zhi);
      

  2.   

    string SelectCommand="SELECT * From Elements Where xiang=zhi";改为string SelectCommand="SELECT * From Elements Where "+xiang+"="+zhi;注意xiang和zhi都要做检查, 譬如如果在zhi中出现'号的话,就要变成''
      

  3.   

    string SelectCommand="SELECT * From Elements Where "+xiang+"='"+zhi+"'";
      

  4.   

    还是不行啊,依然报错:索引(从零开始)必须大于或等于零,且小于参数列表的大小。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.FormatException: 索引(从零开始)必须大于或等于零,且小于参数列表的大小。源错误: 行 126: SqlConnection MyConnection=new SqlConnection("server=(local)\\HJHSQL;database=Materials;uid=hjh;pwd=911144");
    行 127:
    行 128: string SelectCommand=String.Format("SELECT * From Elements Where {0} = '{1}',xiang,zhi");
    行 129: SqlCommand MyCommand=new SqlCommand(SelectCommand,MyConnection);
    行 130: MyCommand.Connection.Open();
     源文件: c:\inetpub\wwwroot\materialdb\chuji.aspx.cs    行: 128 
      

  5.   

    string SelectCommand="SELECT * From Elements Where "+ xiang + "=" + zhi;