Как подключиться к базе данных Access, используя пространство имен OleDb в .NET? - PullRequest
1 голос
/ 24 декабря 2010

Я хочу использовать базу данных Access для своего приложения Windows Forms.(написано на C #)
Я использовал пространство имен OleDb для подключения, и я могу выбирать записи из источника, используя объекты OleDbConnection и ExecuteReader.
Однако я не могу вставить,обновить или удалить записи.

Мой код следующий:

 OleDbConnection con = new OleDbConnection(strCon);

 try
 {
     string con="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=xyz.mdb;Persist Security Info=True";

     con.Open();

     OleDbCommand com = new OleDbCommand("INSERT INTO DPMaster(DPID, DPName, ClientID, ClientName) VALUES('53', 'we', '41', 'aw')", con);

     int a = com.ExecuteNonQuery();

     //OleDbCommand com = new OleDbCommand("SELECT * FROM DPMaster", con);
     //OleDbDataReader dr = com.ExecuteReader();

     //while (dr.Read())
     //{
     //    MessageBox.Show(dr[2].ToString());
     //}

     MessageBox.Show(a.ToString());
 }
 catch
 {
     MessageBox.Show("cannot");
 }

Если я прокомментировал блок, приложение работает нормально.Но блок вставки этого не делает.

Зная это, почему я не могу вставить, обновить или удалить записи базы данных?

Ответы [ 2 ]

4 голосов
/ 24 декабря 2010

Проблема, с которой я столкнулся, заключается в следующем:

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

Итаквы можете выбрать его, но удаление строк не влияет на исходный файл, который у вас есть в вашем решении.

Проверьте его.

2 голосов
/ 24 декабря 2010

Во-первых, никогда не душите свое исключение.Лучше позволить вашему исключению всплыть, чтобы вы могли получить важную информацию о том, что не работает должным образом.Лучше написать:

con.Open();
OleDbCommand com = new OleDbCommand("INSERT INTO DPMaster(DPID,DPName,ClientID,ClientName) VALUES('53','we','41','aw')", con);

int a = com.ExecuteNonQuery();

, чем

try {
    con.Open();
    OleDbCommand com = new OleDbCommand("INSERT INTO DPMaster(DPID,DPName,ClientID,ClientName) VALUES('53','we','41','aw')", con);

    int a=com.ExecuteNonQuery();

} catch {
    MessageBox.Show("cannot");
}

Во-вторых, максимально используйте блоки using, так как эти блоки будут содержать ненужные объекты.Поэтому ваш код должен выглядеть следующим образом:

using (OleDbConnection con = new OleDbConnection(conStr))
    using (OleDbCommand com = new OleDbCommand("INSERT INTO DPMaster(DPID,DPName,ClientID,ClientName) VALUES('53','we','41','aw')", con) {

        con.Open();

        int a = com.ExecuteNonQuery();

        MessageBox.Show(a.ToString());
    }

С помощью этого кода вы, скорее всего, узнаете, что происходит не так, пока возникнет исключение, плюс, как только вы выйдете из областииз блоков using используемые ресурсы будут освобождены по мере удаления ваших объектов.

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