我正在搜索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:无效的数字!有人可以帮忙吗
答案 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的内容。如果多次运行查询,这也会更有效,因为每次执行查询时都不需要对其进行硬分析。