【问题标题】:Searching VARCHAR2 in oracle 11g DB在 oracle 11g DB 中搜索 VARCHAR2
【发布时间】:2018-03-13 17:17:48
【问题描述】:

我正在搜索 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: invalid number!有人可以帮忙吗

【问题讨论】:

  • 您在TextBox1 中输入什么内容?而DF_FORM_COMP_VALUE的数据类型是什么?
  • @BobJarvis 我想你的意思是VALUE_STR 的数据类型是什么:)

标签: oracle select search oracle11g varchar2


【解决方案1】:

我假设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 的内容。如果您多次运行查询,这也更有效,因为您的查询不需要在每次执行时都进行硬解析。

【讨论】:

    猜你喜欢
    • 2014-06-29
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 2014-12-22
    相关资源
    最近更新 更多