Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中向Access 2007数据库添加记录时发生异常#_C#_Ms Access_Ms Access 2007 - Fatal编程技术网

C# 在c中向Access 2007数据库添加记录时发生异常#

C# 在c中向Access 2007数据库添加记录时发生异常#,c#,ms-access,ms-access-2007,C#,Ms Access,Ms Access 2007,我试图使用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;D

我试图使用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 ");

您确切地得到了什么错误消息。我猜您正在请求一个不存在的表,您的查询只返回1个表,所以它的索引是0

试试这个:

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

据我所知,代码的问题是您创建了数据集(
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
包装在
中,以确保CLR正确清理它们