在oracle 11g DB中搜索VARCHAR2

时间:2018-03-13 17:17:48

标签: oracle select search oracle11g varchar2

我正在搜索varchar2列“DF_FORM_COMP_VALUE”,其中包含ID号和地址,通过仅在oracle 11g DB中根据ID号进行搜索来检索数据。我构建了以下代码来检索数据

  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Web;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.Data;
  using System.Data.OracleClient;


  public partial class _Default : System.Web.UI.Page
 {
 protected void Page_Load(object sender, EventArgs e)
 {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
    String mycon = "DATA SOURCE=mydatasource/example;USER 
    ID=user;Password=mypassword;Unicode=True";
    String myquery = "Select * From DF_FORM_COMP_VALUE Where VALUE_STR =" + 
    TextBox1.Text;
    OracleConnection con = new OracleConnection(mycon);
    OracleCommand cmd = new OracleCommand();
    cmd.CommandText = myquery;
    cmd.Connection = con;
    OracleDataAdapter da = new OracleDataAdapter();
    da.SelectCommand = cmd;
    DataSet ds = new DataSet();
    da.Fill(ds);
    if (ds.Tables[0].Rows.Count > 0)
    {
        Label1.Text = "Particular ID found successfully";
        Label2.Text = ds.Tables[0].Rows[0]["ID_TRANSACTION"].ToString();
        Label3.Text = ds.Tables[0].Rows[0]["ID_FORM_COMPONENT"].ToString();
        Label4.Text = ds.Tables[0].Rows[0]["ID"].ToString();
    }

    else
    {
        Label1.Text = "ID Not Found - Please Serach Again";
    Label2.Text = "";
        Label3.Text = "";
        Label4.Text = "";
    }
    con.Close();
}

protected void TextBox1_TextChanged(object sender, EventArgs e)
{

}
}

它不断抛出错误ORA-01722:无效的数字!有人可以帮忙吗

1 个答案:

答案 0 :(得分:0)

我假设TextBox1.Text是用户在某个网页上的某种输入?如果该变量的内容为“x”,那么您最终将使用此查询:

Select * From DF_FORM_COMP_VALUE Where VALUE_STR = x

这不会起作用,因为你需要字符串“x”,但这里它看起来像一个变量。

您可能希望此行看起来像:

String myquery = "Select * From DF_FORM_COMP_VALUE Where VALUE_STR = '" + 
TextBox1.Text + "'";

这是一个非常糟糕的想法。不要这样做。

您需要阅读SQL Injection。切勿将不安全的,用户指定的文本直接放入SQL查询中。这样做会使您的应用程序变得非常容易破解。

我不确定您使用什么连接到Oracle,但是您想要创建参数化查询并将用户输入作为绑定变量。这样做的一个例子是here。所以你真的希望你的查询看起来像这样:

String myquery = "Select * From DF_FORM_COMP_VALUE Where VALUE_STR = :myinput"

然后将TextBox1.Text绑定到:myinput,具体取决于您用于访问Oracle的内容。如果多次运行查询,这也会更有效,因为每次执行查询时都不需要对其进行硬分析。

相关问题