在 oracle 11g DB 中搜索 VARCHAR2

Searching VARCHAR2 in oracle 11g DB

我正在搜索包含 ID 号和地址的 varchar2 列 "DF_FORM_COMP_VALUE",以便通过仅在 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:无效数字!有人可以帮忙吗

我假设 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。切勿将不安全的 user-specified 文本直接放入 SQL 查询中。这样做将使您的应用程序变得容易破解。

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

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

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