C#学习教程:使用OleDbDataAdapter和DataSet更新Access.mdb我在某些表上遇到异常,搜索后,我找到了MicrosoftSupport-SyntaxError。我相信这意味着其中一个列名使用了保留字。这似乎是因为所有表都已更新,但保留字除外,保留字将“GUID”作为列名之一。该页面还指出我应该使用OleDbAdapter和DataSet来解决这个问题。不幸的是我无法更改列的名称。这是我无法控制的,所以我必须使用给我的东西。我不必对数据库做太多事情,我所知道的一切(可能不好)都是从互联网上的例子中学到的。那么使用OleDbAdapter和dataSet更新数据库的正确方法是什么呢?我认为我不应该使用DataTable或OleDbCommandBuilder,我认为解决方案与参数有关。但是我的谷歌技能很弱。OleDbConnectionconn=newOleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+DataSource="+source);conn.Open();OleDbAdapteradapter=newOleDbDataAdapter("SELECT*From"+table,conn);OleDbCommandBuildercmdBuiler=newOleDbCommandBuilder(adapter);DataSet=newDatSet();adapter.InsertCommand=cmdBuilder.GetInertCommand(true);//这是必要的吗?adapter.Fill(dataSet,table);DataTabledataTable=dataSet.Tables[table];//我需要数据表吗?DataRowrow=dataTable.row[attribute]=field;//对所有属性/字段执行此操作。我认为这是错误的。dataTable.rows.Add(row);(dataTable);//<--"SyntaxerrorinINSERTINTOstatement."Exception问题可能是列名(尤其是名称为保留字的列名)应该用方括号括起来。OleDbCommandBuilder在创建自己的InsertCommand时并没有将名称括在括号中,因此解决方案是手动定义OleDbDataAdapter的InsertCommand:adapter.InsertCommand=newOleDbCommand(String.Format("INSERTINTO{0}([GUID],[fieldName])Values(@guid,@fieldName);,table),conn);为每一列定义参数,然后手动添加参数的值;adapter.InsertCommand.Parameters.Add(newOleDbParameter("@guid",row["GUID"]));总之,对于包含名为“GUID”的列的表,您应该尝试以下操作:OleDbConnectionconn=newOleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+"DataSource="+source);conn.Open();OleDbDataAdapter适配器=newOleDbDataAdapter("SELECT*From"+table,conn);OleDbCommandBuildercmdBuilder=newOleDbCommandBuilder(适配器);adapter.InsertCommand=newOleDbCommand(String.Format("INSERTINTO{0}([GUID],[fieldName])Values(@guid,@fieldName);",table),conn);DataTabledataTable=newDataTable(table);适配器.填充(数据表);DataRow行=dataTable.NewRow();行[字段名]=字段值;//例如:row["GUID"]=System.Guid.NewGuid().ToS特林();//对所有属性/字段执行此操作。dataTable.Rows.Add(行);adapter.InsertCommand.Parameters.Add(newOleDbParameter("@fieldName",row[fieldName]));//例如:adapter.InsertCommand.Parameters.Add(newOleDbParameter("@guid",row["GUID"]));适配器.更新(数据表);至于问题#1,尝试完全限定列名,即table.columnName(这可以解决MySQL中的问题,也许它可以在Access中解决),尝试将[]放在列名周围。选择*通常不是指定列名和使用别名的错误选择。例如,使用SelectColumn1as'Column1',Column2as'Column2'...。这使得使用数据集和数据表更加容易,因为您可以通过别名而不是列索引访问列。我发现DataAdapter对于填充数据集比实际修改数据库更有用。我建议像这样:stringupdateQuery="Update.....Where....";//在这里施展你的魔法OldDbcommandcommand=newOleDbCommand(updateQuery);命令.Connection=conn;conn.Open();骗局。执行非查询();conn.Close();您可以使用适配器填充数据集,然后像我刚才那样对数据库执行更新命令。一个好的起点是使用DataSetDesigner和TypedDataSet开始尝试此步骤:http://msdn.microsoft.com/en-us/library/ms171893(v=vs.80).aspx一个好的长期方法是使用SqlServerExpress,那么你可以选择使用:EntityFramework、LinqToSql或者仍然继续使用DataSetDesigner和TypedDataSet。以上就是C#学习教程:使用OleDbDataAdapter和DataSet更新Access.mdb共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
