2016-06-28 2 views
0

Я выполнение UPDATE ИЛИ INSERT команды с WHERE заявления, и я получил эту ошибку:Firebird неизвестные лексемы, где

enter image description here

Вот мой код:

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
{ 
    try 
    { 
    FbConnection con = new FbConnection(@"User = SYSDBA; Password = masterkey; Database = D:\TDWORK.fdb; DataSource = localhost; Port = 3050; Dialect = 3; Charset = NONE; Role = admin; Connection lifetime = 15; Pooling = true; MinPoolSize = 0; MaxPoolSize = 50; Packet Size = 8192; ServerType = 0; "); 
    FbCommand cmd = new FbCommand("UPDATE OR INSERT INTO ZAPOSLENI (ULOGA) VALUES (" + dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() + ") WHERE ZAPID = " + dataGridView1.Rows[e.RowIndex].Cells[0].Value + " ", con); 
    con.Open(); 
    cmd.ExecuteNonQuery(); 
    con.Close(); 
    } 
    catch (Exception ex) 
    { 
    MessageBox.Show(ex.ToString()); 
    } 
} 

А вот как команда выглядит так, как если в ней вставляются значения отладчика:

UPDATE OR INSERT INTO ZAPOSLENI (ULOGA) VALUES (1) WHERE ZAPID = 0 
+0

Ваш текущий код является небезопасным, как она открыта для SQL инъекций. Вы действительно должны использовать параметры. –

+0

Что значит – Pacijent

+0

Вы объединяете значения в строку запроса, что является небезопасным. Вам нужно использовать параметры, см. Пример [этот ответ] (http://stackoverflow.com/a/10438372/466862) –

ответ

2

Вы не можете использовать WHERE в предложении вставки или обновления (см. UPDATE OR INSERT). Если вы хотите, чтобы вставить строку, если нет записи с ZAPID = 0 использовать следующее заявление:

UPDATE OR INSERT INTO ZAPOSLENI (ZAPID, ULOGA) VALUES (0, 1) MATCHING (ZAPID) 

EDIT: Полный пример

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
{ 
    try 
    { 
     FbConnection con = new FbConnection(@"User = SYSDBA; Password = masterkey; Database = D:\TDWORK.fdb; DataSource = localhost; Port = 3050; Dialect = 3; Charset = NONE; Role = admin; Connection lifetime = 15; Pooling = true; MinPoolSize = 0; MaxPoolSize = 50; Packet Size = 8192; ServerType = 0; "); 
     FbCommand cmd = new FbCommand("UPDATE OR INSERT INTO ZAPOSLENI (ZAPID, ULOGA) VALUES (" + dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() + ", " + dataGridView1.Rows[e.RowIndex].Cells[0].Value + ") MATCHING (ZAPID)", con); 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
} 
+0

он не работает. В нем говорится, что обновление или вставка не соответствуют предложению MATCHING. Вот команда: 'FbCommand cmd = new FbCommand (" UPDATE ИЛИ INSERT INTO ZAPOSLENI (ULOGA) VALUES ("+ dataGridView1.Rows [e.RowIndex] .Cells [e.ColumnIndex] .Value.ToString() +") MATCHING (ZAPID) ", con);' – Pacijent

+0

Я думаю, что вы должны включить 'ZAPID' в столбцы и значения, как это было в ответе. – scher

+0

Помог ли вам ответ? – scher

Смежные вопросы