C# и БД MS Access. Часть 2

В прошлой статье я описал подключение C# к файлу базы данных Microsoft Access (*.mdb), а также механизм извлечения из него необходимых данных.
В этой статье я расскажу о добавлении/изменении/удалении данных в базе данных MS Access в C#, а также о механизме отлова и устранения ошибок взаимодействия с ранееупомянутой СУБД.

Как я писал ранее, для чтения данных из БД MS Access используется класс OleDbDataReader. Но для выполнения запросов на вставку, изменение, или удаление данных из базы данных следует использовать метод класса OleDbCommand ExecuteNonQuery (). Его вызов выполняет указанный в свойстве CommandText класса OleDbCommand запроc и возвращает int-число затронутых запосом полей.

OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=data.mdb")
conn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.CommandText = "NSERT INTO myTable VALUES (1,2,3)";
int rowsAffected = cmd.ExecuteNonQuery();
System.Windows.Forms.MessageBox.Show(rowsAffected.ToString());

В данном случае rowsAffected будет равняться единице.

Во время INSERT'ов можно использовать параметры, что может пригодиться, например, для загонки в базу данных файла изображения.

OleDbCommand cmd = new OleDbCommand("INSERT INTO MyTable (columns) VALUES (@param)",conn);
cmd.Parameters.Add("@param","abc[[''[]''kl'm");
cmd.ExecuteNonQuery();

Однако во взаимодействии C# и СУБД Microsoft Access есть одна очень неприятная загвоздка: при каких-либо ошибках в синтаксисе, или структуре SQL-запроса, программа падает в OS Loader Lock, и не дает никакой информации о произошедшей ошибке.
Чтобы этого избежать и получить довольно исчерпывающую информацию о произошедшей ошибке, следует выполнять запросы в try-catch блоках:

OleDbCommand cmd = dbconnection.CreateCommand();
cmd.CommandText = "DELETE FROM myTable WHERE (data='" + textbox1.Text + "')";
conn.Open();
try
{
 int rowsAffected = cmd.ExecuteNonQuery();
 System.Windows.Forms.MessageBox.Show(rowsAffected.ToString());
}
catch (Exception ex)
{
 System.Windows.Forms.MessageBox.Show(ex.Message);
}
conn.Close();

Что-то не ясно? Спрашивайте, объясню.

Поблагодарить автора

5 Responses to C# и БД MS Access. Часть 2

  1. С ними все аналогично за исклением того, что вместо OleDbCommand используется OleDbDataAdapter:

    OleDbConnection conn = new OleDbConnection (@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=data.mdb");

    OleDbDataAdapter myDataAdapter = new System.Data.OleDb.OleDbDataAdapter («SELECT * FROM table»,conn); // Создаем новый OleDbDataAdapterи передаем в его конструктор запрос и источник данных

    DataSet myDataSet = new DataSet («Table»); // Создаем новый DataSet с таблицей «Table»

    myDataAdapter.Fill (myDataSet,"Table"); // заполняем наш датасет данными из запроса

  2. у меня VS2008, то етсь мне не нужно создавать OLEDB подключение, но у меня после сохранения не дает менять и удалять данные...как побороть не знаю...и помогать никто не хочет((((...ошибка звучит так...недействительный Update......если согласитесь помочь вышлю проект...

  3. в первом примере

    int rowsAffected = cmd.ExecuteNonQuery ();

    тут упадет, т.к. у cmd не установлено подключение к БД ;)

  4. new OleDbConnection (@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=data.mdb")

    Тут имя файла базы данных правильно указано?

Оставить комментарий

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>