Исключение при добавлении записи в базу данных Access 2007 в c # - PullRequest
0 голосов
/ 02 июня 2011

Я пытаюсь добавить запись в базу данных Access 2007, используя c #, но получаю исключение.

Вот мой код, база данных называется hms, а таблица называется login

DataSet ds = new DataSet();

System.Data.OleDb.OleDbConnection con;
DataRow dRow;
con = new System.Data.OleDb.OleDbConnection();
con.ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" +  Application.StartupPath + "\\hms.mdb";
string sql = "select * from login";
con.Open();
OleDbDataAdapter da = new OleDbDataAdapter(sql, con);

System.Data.OleDb.OleDbCommandBuilder cb;
cb = new System.Data.OleDb.OleDbCommandBuilder(da);

dRow = ds.Tables[1].NewRow(); //I get an error on this line

dRow[1] = "sakest";
ds.Tables["hms"].Rows.Add(dRow);
da.Fill(ds, "hms");
da.Update(ds, "hms");

MessageBox.Show("new enrtry ");

Ответы [ 2 ]

0 голосов
/ 02 июня 2011

Насколько я могу судить, проблема с вашим кодом заключается в том, что вы создаете свой DataSet (ds), но никогда не заполняете его.

Вам нужно что-то похожее на это:

using (OleDbConnection con = new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\hms.mdb"))
{
    con.Open();
    string sql = "select * from login";
    using (OleDbDataAdapter da = new OleDbDataAdapter(sql, con))
    {
        DataSet ds = new DataSet();
        da.Fill(ds);

        DataRow dRow = ds.Tables[0].NewRow();
        dRow[1] = "sakest";
        ds.Tables["hms"].Rows.Add(dRow);
        da.Fill(ds, "hms");
        da.Update(ds, "hms");

        MessageBox.Show("new enrtry ");
    }
}

По сути, бит, который вы ищете, - это строка da.Fill(ds), и изменение с ds.Tables[1].NewRow() на ds.Tables[0].NewRow().

Примечание: Я перенастроил код, чтобы показать вам, как обернуть OleDbConnection и OleDbDataAdapter в using, чтобы убедиться, что они очищены до CLR должным образом.

0 голосов
/ 02 июня 2011

Какое именно сообщение об ошибке вы получаете. В предположении я бы сказал, что вы запрашиваете таблицу, которая не существует, ваш запрос возвращает только 1 таблицу, поэтому ее индекс будет 0

Попробуйте это:

dRow = ds.Tables[0].NewRow();
...