Исключение при использовании нескольких текстовых полей в C # для обновления базы данных Access - PullRequest
0 голосов
/ 29 декабря 2011

Мой код выдает это исключение:

Синтаксическая ошибка в выражении UPDATE

Что не так с моим синтаксисом SQL?Как это исправить?

Я использую Visual Studio 2010 и базу данных Access.Вот мой код:

private void CBM_editButton_Click(object sender, EventArgs e)
{
    try
    {
        // to edit or update already existing informations
        OleDbConnection con = new OleDbConnection();
        con.ConnectionString =
          @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Sunquick\Desktop\c sharp project2\ContactBook2.mdb";

        OleDbCommand com = new OleDbCommand();
        com.CommandText = "UPDATE ContactList set Name='" + CBM_textbox1.Text +
          "','" + CBM_textbox2.Text + "','" + CBM_textbox3.Text +
          "','" + CBM_textbox4.Text + "','" + CBM_textbox5.Text + "'";

        com.Connection = con;
        con.Open();
        com.ExecuteNonQuery();

        MessageBox.Show("Data has been changed");
        con.Close();
    }
    catch(Exception Error)
    {
        MessageBox.Show(Error.ToString());
    }

    CBM_textbox1.Text = "";
}

Ответы [ 2 ]

2 голосов
/ 29 декабря 2011

Если одно из ваших текстовых полей содержит текст с одинарной кавычкой, это создаст недопустимый оператор sql.

Как указали другие, вы можете использовать параметризованные запросы.Тем не менее, я покажу вам строковую версию.

Она использует эту вспомогательную функцию

private string SqlStr(string s) 
{
    if (String.IsNullOrEmpty(s)) {
        return "NULL";
    }
    return "'" + s.Replace("'", "''") + "'";
}

Попробуйте:

string sql = String.Format(
    "UPDATE ContactList SET Name={0}, Email={1}, Mobile={2}, Country={3}, City={4}",
    SqlStr(CBM_textbox1.Text),
    SqlStr(CBM_textbox2.Text),
    SqlStr(CBM_textbox3.Text),
    SqlStr(CBM_textbox4.Text),
    SqlStr(CBM_textbox5.Text)
);  

В вашем примере sql есть лишние ")"в конце и поскольку отсутствует оператор WHERE, он обновит всю таблицу!Вы должны добавить что-то вроде этого:

"... WHERE id=77"

Или, может быть, вы пытались добавить запись?В этом случае вы должны были использовать что-то вроде:

INSERT INTO ContactList (Name, Email, City) VALUES ('John','jd@xx.com','LA')
2 голосов
/ 29 декабря 2011
com.CommandText = "UPDATE ContactList set Name='" + CBM_textbox1.Text + 
   "', Email='" + CBM_textbox2.Text + "', Mobile='" + CBM_textbox3.Text + 
   "', Country='" + CBM_textbox4.Text + "', City='" + CBM_textbox5.Text + "')"

от 2-го до последнего символа - '' '- откуда это взято

(Кроме того, у вас нет предложения where, поэтому вы обновляете всю таблицу)

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