简体   繁体   中英

Exception when adding a record to an Access 2007 database in c#

I'm trying to add a record to an Access 2007 database using c# but I get an exception.

Here's my code, the database is called hms and the table is called 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 ");

What error message are you getting exactly. At a guess I would say that you are requesting a table that does not exist, your query only returns 1 table so it's index would be 0

Try this:

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

As far as I can tell, the issue with your code is that you create your DataSet ( ds ), but never fill it.

You need something similar to this:

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 ");
    }
}

Basically, the bit you're after is the da.Fill(ds) line, and the change from ds.Tables[1].NewRow() to ds.Tables[0].NewRow() .

Note: I've re-jigged the code so as to show you how to wrap the OleDbConnection and OleDbDataAdapter in using 's so as to ensure that they're cleaned up by the CLR properly.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM