Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.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#数据表更新Access数据库_C#_Database_Ms Access_Datatable_Oledb - Fatal编程技术网

C#数据表更新Access数据库

C#数据表更新Access数据库,c#,database,ms-access,datatable,oledb,C#,Database,Ms Access,Datatable,Oledb,如何将数据表保存到文件中。accdb(访问)是否存在?我使用了以下代码,但它不起作用: using (OleDbConnection oledbConnection = new OleDbConnection(connection)) { oledbConnection.Open(); string query = "SELECT * FROM Student"; using (OleDbCommand oledbCommand = new OleDbCommand(query

如何将
数据表
保存到文件中。accdb(访问)是否存在?我使用了以下代码,但它不起作用:

using (OleDbConnection oledbConnection = new OleDbConnection(connection))
{
   oledbConnection.Open();
   string query = "SELECT * FROM Student";
   using (OleDbCommand oledbCommand = new OleDbCommand(query, oledbConnection))
   {
      using (OleDbDataAdapter oledbDataAdapter = new OleDbDataAdapter(oledbCommand))
      {
         using (OleDbCommandBuilder oledbCommandBuilder = new OleDbCommandBuilder(oledbDataAdapter))
         {
            oledbDataAdapter.DeleteCommand = oledbCommandBuilder.GetDeleteCommand(true);
            oledbDataAdapter.InsertCommand = oledbCommandBuilder.GetInsertCommand(true);
            oledbDataAdapter.UpdateCommand = oledbCommandBuilder.GetUpdateCommand(true);
            oledbDataAdapter.Update(dataTable);
         }
      }
   }
   oledbConnection.Close();
}
变量dataTable用文件的原始内容初始化,然后通过添加一行对其进行修改,现在我必须更新数据库中的表

我尝试使用以下代码,但不起作用:(


假设您在datatable中做了一些更改,那么您可以通过这种方式将生成的update/insert/delete命令传递给适配器

oledbDataAdapter.DeleteCommand = oledbCommandBuilder.GetDeleteCommand();
oledbDataAdapter.InsertCommand = oledbCommandBuilder.GetInsertCommand();
oledbDataAdapter.UpdateCommand = oledbCommandBuilder.GetUpdateCommand();
oledbDataAdapter.Update(datatable);

现在适配器知道如何更新表了

假设您对datatable做了一些更改,那么您可以通过这种方式将生成的update/insert/delete命令传递给适配器

oledbDataAdapter.DeleteCommand = oledbCommandBuilder.GetDeleteCommand();
oledbDataAdapter.InsertCommand = oledbCommandBuilder.GetInsertCommand();
oledbDataAdapter.UpdateCommand = oledbCommandBuilder.GetUpdateCommand();
oledbDataAdapter.Update(datatable);

现在适配器知道如何更新表了

如果您在
监视窗口
中发出
dataTable.GetChanges()
,您是否得到任何更改?此方法对其他函数有用,但对此不有用。感谢您发出
dataTable.GetChanges()
监视窗口中,您是否得到任何更改?此方法对于另一个函数很有用,但对于此函数无效。感谢Good catch Steve,当我阅读
GetDeleteCommand()
行时,我忽略了OP没有分配命令的事实!是的!“无法添加所需的数据量。字段太小。插入或粘贴的数据较少。”这是另一个问题。它是由插入到表的一列中的值生成的。此列(可能是文本列)的大小不足以包含用户在输入框中键入的数据(需要将其缩小或设置maxlength)我建议发布一个新的问题,它会比这个答案中的评论更受关注。很好,Steve,我错过了一个事实,即当我阅读
GetDeleteCommand()
line!yes!”时,OP没有分配命令。无法添加所需的数据量。字段太小。插入或粘贴的数据较少。“嗯,这是另一个问题。它是由插入表中某一列的值生成的。此列(可能是文本列)的大小不足以包含用户在输入框中键入的数据(需要将其缩小或设置maxlength)。我建议发布一个新问题,它将比此答案中的注释更受关注。