Я получаю ошибку в следующем cede.(System.Data.OleDb.OleDbException: ORA-00933: команда SQL не завершена должным образом) - PullRequest
1 голос
/ 23 марта 2011
protected void save_Click(object sender, EventArgs e)
    {
        OleDbConnection conn = null;
        try
        {

            string connString = "Provider=OraOLEDB.Oracle;Data Source=127.0.0.1;User ID=SYSTEM;Password=SYSTEM;Unicode=True";
            conn = new OleDbConnection(connString);
            conn.Open();
            string strQuery = "update login set fname ='" + TextBox4.Text + "' and lname='" + TextBox5.Text + "' and place='" + TextBox6.Text + "' and dob='" + TextBox7.Text + "' where uname='" + Label1.Text + "'";
            OleDbCommand obCmd = new OleDbCommand(strQuery, conn);
            OleDbDataReader obReader = obCmd.ExecuteReader();

          }
        catch (OleDbException ex)
        {
            Response.Write("Send failure: " + ex.ToString());

        }
        catch (Exception exe)
        {
            Response.Write(exe.Message);
        }
        finally
        {
            if (null != conn)
            {
                conn.Close();
            }
        }
    }

Ответы [ 2 ]

4 голосов
/ 23 марта 2011

неверный синтаксис запроса на обновление. Вы не можете использовать AND при установке нескольких столбцов. Он должен быть разделен запятой.

string strQuery = "update login set fname ='" + TextBox4.Text + "',lname='" + 
TextBox5.Text + "',place='" + TextBox6.Text + "',dob='" + TextBox7.Text + 
"' where uname='" + Label1.Text + "'";
0 голосов
/ 03 июня 2011

Значения должны быть разделены запятой, и в этом коде есть одна большая проблема. Представьте, что происходит, когда кто-то помещает в TextBox4 следующее:

' where 1 = 1 --

Результатом будет таблица, в которой все записи будут перезаписаны

update login set fname ='' where 1 = 1 --', lname='bla' ....

Вместо этого используйте DbParameter:

string strQuery = @"
update LOGIN set
FNAME = :FNAME,
LNAME = :LNAME,
PLACE = :PLACE,
DOB   = :DOB
where 
UNAME = :UNAME
";

OleDbCommand obCmd = new OleDbCommand(strQuery, conn);
obCmd.Parameters.AddWithValue(":FNAME", TextBox4.Text);
obCmd.Parameters.AddWithValue(":LNAME", TextBox5.Text);
obCmd.Parameters.AddWithValue(":PLACE", TextBox6.Text);
obCmd.Parameters.AddWithValue(":DOB", TextBox7.Text);
obCmd.Parameters.AddWithValue(":UNAME", Label1.Text);

OleDbDataReader obReader = obCmd.ExecuteReader();

Для Oracle : должен указывать параметр (это @ для Sybase и MS SQL). Я назвал все параметры как целевые столбцы, но вы можете использовать и другие имена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...