protected void Button1_Click(object sender, EventArgs e)
    {
        if (this.TextBox1.Text != "")
        {
            OracleConnection myConn = GetConnection();
            myConn.Open();
            string str = DropDownList1.SelectedValue.ToString(); 
            string sqlStr = "select * from JIAOYIXINXI where str =:str";
            OracleCommand myCmd = new OracleCommand(sqlStr, myConn);
            myCmd.Parameters.Add("str", OracleType.VarChar, 100).Value = this.TextBox1.Text.Trim();            OracleDataAdapter myDa = new OracleDataAdapter(myCmd);
            DataSet myDs = new DataSet();
            myDa.Fill(myDs);
            if (myDs.Tables[0].Rows.Count > 0)
            {
                GridView1.DataSource = myDs;
                GridView1.DataBind();
            }
            else
            {
                Response.Write("<script>alert('没有相关记录') </script>");
            }
            myDa.Dispose();
            myDs.Dispose();
            myConn.Close();
        }
    }
以上是代码。(.net 2.0 oracle 9i)
我想要实现的功能是先通过DropDownList选择一个字段名,然后在textbox中输入改字段名对应的数值,点击查询后在Gridview中显示查到的信息,我将DropDownList1.SelectValue.toString()赋值给了str,然后将相关的字段名用str代替,可是为什么不能实现呢?报错是ora-00904 无效列名 请大侠指点一二,很着急。。

解决方案 »

  1.   

    string sqlStr = "select * from JIAOYIXINXI where str =:str";//这里错了
    应该为
    string sqlStr = "select * from JIAOYIXINXI where "+str+" =:str";
      

  2.   

    银哥牛淫啊~呵呵,可是为什么我选择DropDownList中的任何一个值的时候系统总是说找不到,难道是格式问题?为了方便起见,我ORACLE表中的数据格式全都设置成了varchar2类型,麻烦大哥再指点一二?银哥方便留个QQ等联系方式不?以后还请多多指教,谢谢
      

  3.   

    就是比较高级的查询啊,呵呵 就是一般的查询name的SQL语句是“select * from tab_name where name=:name”我想实现的是将这个name变成可选的,我可以选择"ID"、"NAME"、"AGE"等我在DropDownList中放入的字段,这就是我概念中的高级查询
      

  4.   

    把生成的sql放到pl/sql中运行看
    string sql="select * from tab_name where 1=1";
    sql+string.IsNullOrEmpty(str)?"":"";
      

  5.   

    string name=DropDownList1.SelectValue;
    “select * from tab_name where name=@name”
    MyCommand.Parameters.AddWithValue("name", name);
      

  6.   

    string sqlStr = "select * from JIAOYIXINXI where str =:str";//这里不加引号会自动把当前的str当作查询字符串的一个列名,而不是变量。
    string sqlStr = "select * from JIAOYIXINXI where "+str+" =:str";//这句话等同于
    String sqlStr="select * from JIAOYIXINXI where ";
    sqlStr+=str;
    sqlStr+=" =:str";你可以在运行时,把sqlStr添加到监视,或在即时窗口中查看生成的sql语句,你就知道是为什么了