我正在尝试使用c#向Access 2007数据库添加记录,但是我得到了一个例外。
这是我的代码,数据库名为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 ");
答案 0 :(得分:0)
您准确得到了什么错误消息。猜测我会说你要求一个不存在的表,你的查询只返回1个表,所以它的索引是0
试试这个:
dRow = ds.Tables[0].NewRow();
答案 1 :(得分:0)
据我所知,您的代码问题在于您创建了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正确清理它们。