2016-07-28 5 views
-2

У меня есть файл .accdb с четырьмя таблицами в немКак вставить данные в один столбец (ячейку) новой строки в C#?

Product_Particulars 
Cust_Details 
Variable_fields 
Permanant_fields 

Количество столбца в таблицы «Variable_fields» не фиксируется (меняется с помощью «Alter Table» OleDb nonQuery). Но он имеет два фиксированных столбца «Tranx_ID», «Tranx_time».

Я хочу выполнить что-то, что позволит мне добавить данные в столбце «Tranx_ID» в новой строке из текстового поля, не заботясь о других столбцах в таблице (т. Е. О других ячейках в этой строке, в которых «textBox .Text 'пытается вставить) и сохранить строку с данными только в одной ячейке.

NB: Я на самом деле с помощью OleDb & я буду использовать «Tranx_ID» для обновления этой конкретной строки, используя OleDbCommand как,

"UPDATE Variable_fields " + 
"SET [This column]='" +thistxtBx.Text + 
    "',[That column]='" +thattxtBx.Text + 
"'WHERE ([Tranx_ID]='" +textBox.Text+ "')"; 
+0

Хотя я гугл, чтобы получить решение моей проблемы, это может быть я что-то спросил «глупый», так что не стесняйтесь downvote моего вопроса, но, пожалуйста, пожалуйста, помогите мне выйти из этого peoblem. Любая помощь, фрагмент кода, ссылка все приветствуются. :( –

+0

И что не работает в вашем предлагаемом решении? Вы пытались? – Steve

+0

Привет, Стив, проблема в том, что всякий раз, когда я пытаюсь вставить textBox.Text в Tranx_ID с помощью oledbcommand, например «INSERT INTO Variable_fields VALUES (« + textBox » .Text + ")"; –

ответ

0

Исключение вызвано тем, что один или несколько столбцов что вы не вставляете, не может иметь значение NULL. Если вы можете удалить этот флаг и разрешить нулевое значение, ваш INSERT может работать или нет по другим причинам.

Действительно вы используете конкатенацию, чтобы построить свой запрос, и это хорошо известный источник ошибок или вектор для взлома tecnique под названием Sql Injection (я действительно предлагаю вам документировать себя об этой неприятной проблеме)

Так что ваш код может быть следующие

string query = @"UPDATE Variable_fields 
       SET [This column]= @this, 
        [That column][email protected] 
       WHERE ([Tranx_ID][email protected]"; 
using(OleDbConnection con = new OleDbConnection(....constringhere....)) 
using(OleDbCommand cmd = new OleDbCommand(query, con)) 
{ 
    con.Open(); 
    cmd.Parameters.Add("@this", OleDbType.VarWChar).Value = thisTextBox.Text; 
    cmd.Parameters.Add("@that", OleDbType.VarWChar).Value = thatTextBox.Text; 
    cmd.Parameters.Add("@trans", OleDbType.VarWChar).Value = transTextBox.Text; 
    int rowsInserted = cmd.ExecuteNonQuery(); 
    if(rowsInserted > 0) 
     MessageBox.Show("Record added"); 
    else 
     MessageBox.Show("Record NOT added"); 
} 

Полезные ссылки:

Sql Injection explained
Give me parameterized query or give me death
Using statement

+0

Очень жаль! Стив, но, вероятно, я не мог сделать свою проблему достаточно ясной, я сказал, что я буду использовать tranx_ID для обновления моей базы данных, но прежде чем это сделать, мне нужно вставить значение Tranx_ID в новую строку и сохранить его. :) И я не смог этого сделать (значение INSERTing в одном столбце, то есть столбце Tranx_ID, в новой строке).Однако я должен поблагодарить вас за те проблемы, которые вы упомянули, которые могут возникнуть на следующем этапе, а также при условии, что это решение. :) –

+0

Чтобы вставить вам просто нужно изменить строку запроса на _INSERT INTO variable_fieds (trans_is, this_column, that_column) VALUES (@trans, @this, @that) _ весь код такой же, как указано выше – Steve

+0

Еще одно спасибо в вашей учетной записи Steve;) (y) –