Поиск VARCHAR2 в БД оракула 11g

Я просматриваю столбец varchar2 «DF_FORM_COMP_VALUE», который включает идентификационный номер с адресом для извлечения данных путем поиска по идентификационному номеру только в базе данных oracle 11g. Я построил следующий код для получения данных

  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: неверный номер! Может кто-нибудь помочь, пожалуйста


person Maxy626    schedule 13.03.2018    source источник
comment
Что вы вводите в TextBox1? И какой тип данных у DF_FORM_COMP_VALUE?   -  person Bob Jarvis - Reinstate Monica    schedule 13.03.2018
comment
@BobJarvis, я думаю, вы имели в виду тип данных VALUE_STR :)   -  person Barbaros Özhan    schedule 13.03.2018


Ответы (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, но вы хотите создать параметризованный запрос и поместить пользовательский ввод в качестве переменной связывания. Один из примеров этого — здесь. Итак, вы действительно хотите, чтобы ваш запрос выглядел так:

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

Затем вы привязываете TextBox1.Text к :myinput в зависимости от того, что вы используете для доступа к Oracle. Это также более эффективно, если вы запускаете запрос несколько раз, потому что ваш запрос не нужно будет тщательно анализировать каждый раз, когда он выполняется.

person eaolson    schedule 14.03.2018