gpt4 book ai didi

c# - 使用 OleDbDataAdapter 和 DataSet 更新 Access.mdb

转载 作者:太空狗 更新时间:2023-10-29 21:47:04 25 4
gpt4 key购买 nike

我正在尝试更新一个简单的 MS Access 数据库。我在某些表上遇到异常,在搜索之后,我找到了 Microsoft Support - Syntax Error .我相信这意味着其中一个列名使用了保留字。这似乎是这种情况,因为所有表都会更新,除了以“GUID”作为列名之一(保留字)的表。 This page also states that I should be using a OleDbAdapter and DataSet,这应该可以解决问题。不幸的是我无法更改列的名称。那是我无法控制的,所以我必须按照给我的东西工作。

我不必经常使用数据库,而且我所知道的一切都是从互联网上的例子中学到的(可能是不好的例子)。那么使用 OleDbAdapter 和数据集更新数据库的正确方法是什么?

我认为我不应该使用 DataTable 或 OleDbCommandBuilder,而且我认为解决方案与参数有关。但是我的谷歌搜索能力很弱。

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; " +
Data Souce=" + source);
conn.Open();
OleDbAdapter adapter = new OleDbDataAdapter("SELECT * From " + table, conn);
OleDbCommandBuiler cmdBuiler = new OleDbCommandBuilder(adapter);
DataSet = new DatSet();
adapter.InsertCommand = cmdBuilder.GetInertCommand(true); // Is this necessary?
adapter.Fill( dataSet, table);
DataTable dataTable = dataSet.Tables[table]; // Do I need a DataTable?
DataRow row = dataTable.
row [ attribute ] = field; // Do this for all attributes/fields. I think this is wrong.
dataTable.rows.Add(row);
adapter.Update(dataTable); //<--"Syntax error in INSERT INTO statement." Exception

最佳答案

问题可能是列名(尤其是那些名称是保留字的)应该用方括号括起来。 OleDbCommandBuilder 在创建自己的 InsertCommand 时不会用方括号括起名称,因此解决方案是手动定义 OleDbDataAdapter 的 InsertCommand:

adapter.InsertCommand = new OleDbCommand(String.Format("INSERT INTO {0} ([GUID], [fieldName]) Values (@guid,@fieldName);", table), conn);

为每一列定义参数,然后手动添加参数值;

adapter.InsertCommand.Parameters.Add(new OleDbParameter("@guid",row["GUID"]));

总而言之,对于具有名为“GUID”的列的表,您应该尝试如下操作:

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" + 
"Data Souce=" + source);
conn.Open();

OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * From " + table, conn);
OleDbCommandBuilder cmdBuilder = new OleDbCommandBuilder(adapter);

adapter.InsertCommand = new OleDbCommand(String.Format("INSERT INTO {0} ([GUID], [fieldName]) Values (@guid,@fieldName);", table), conn);

DataTable dataTable = new DataTable(table);
adapter.Fill( dataTable);
DataRow row = dataTable.NewRow();
row [ fieldName ] = fieldValue;
// eg: row [ "GUID" ] = System.Guid.NewGuid().ToString(); // Do this for all attributes/fields.
dataTable.Rows.Add(row);

adapter.InsertCommand.Parameters.Add(new OleDbParameter("@fieldName",row[fieldName]));
// eg: adapter.InsertCommand.Parameters.Add(new OleDbParameter("@guid",row["GUID"]));

adapter.Update(dataTable);

关于c# - 使用 OleDbDataAdapter 和 DataSet 更新 Access.mdb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5874887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com