получить доступ к данным обновления MDB в C # через sql - PullRequest
0 голосов
/ 25 декабря 2011

Мне помогли здесь Вставка и обновление данных в MDB но все еще есть проблема с обновлением

У меня есть файл доступа mdb с таблицей «Table1» и 3 столбцами

ID
INFO 
TEXT

Я могу добавить новую информацию, найти информацию, но обновление дает мне неизвестную ошибку. Что-то не так с командой, которую я послал.

 con = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = c:\\mdb\\testmdb.mdb");
 cmd = new OleDbCommand();
 cmd.Connection = con;
    cmd.CommandText = "UPDATE Table1 SET Info = @Info, text = @text WHERE ID = @ID;";
    cmd.Parameters.AddWithValue("@ID", textBox1.Text);
    cmd.Parameters.AddWithValue("@Info", textBox2.Text);
    cmd.Parameters.AddWithValue("@text", textBox3.Text);
    con.Open(); // open the connection
    int numAffected = cmd.ExecuteNonQuery();
    con.Close();

1 Ответ

4 голосов
/ 25 декабря 2011

OleDbCommand не поддерживает именованные параметры . Это:

"UPDATE Table1 SET Info = @Info, text = @text WHERE ID = @ID;";

эквивалентно этому:

"UPDATE Table1 SET Info = ?, text = ? WHERE ID = ?;";

и при добавлении параметров в коллекцию Parameters они присваиваются в порядке их добавления. Таким образом, первый добавленный параметр будет назначен первому заполнителю, второй параметр - второму и т. Д. Вы можете использовать имена для заполнителей для удобства чтения, но они не имеют значения при назначении значений.

Таким образом, вам нужно изменить порядок, в котором вы добавляете значения, чтобы соответствовать порядку в вашем запросе:

cmd.Parameters.AddWithValue("@Info", textBox2.Text);
cmd.Parameters.AddWithValue("@text", textBox3.Text);
cmd.Parameters.AddWithValue("@ID", textBox1.Text);
...