【发布时间】:2017-07-19 11:16:20
【问题描述】:
我正在用 C# 编写一个程序,通过 ODBC 自动将数据插入 Navision 数据库。我通过调用 OdbcDataAdapter.Fill() 方法来填充 DataTable 对象。更改一些值后,我想使用 OdbcDataAdapter.Update() 更新原始数据库。然而,这总是会导致:
错误 [42000] [Simba][SimbaEngine ODBC 驱动程序]UPDATE Item SET Location = ? WHERE ((No. >= ?) AND ((? = 1 AND Location IS NULL) OR (Location = ?))) ERROR [42000] [Simba][SimbaEngine ODBC Driver]语法错误。
这是代码:
static void Main(string[] args)
{
DataTable Item = new DataTable();
OdbcConnection connection = new OdbcConnection("DSN=Navision Frank-Backup");
connection.Open();
OdbcDataAdapter adapter = new OdbcDataAdapter();
adapter.SelectCommand = new OdbcCommand("select \"No.\", \"Location\" from Item where \"No.\" = 'AA0182'", connection);
OdbcCommandBuilder builder = new OdbcCommandBuilder(adapter);
adapter.Fill(Item);
Item.Rows[0].BeginEdit();
Item.Rows[0]["Location"] = "SW";
Item.Rows[0].EndEdit();
adapter.UpdateCommand = builder.GetUpdateCommand();
adapter.Update(Item);
}
我希望有人能帮我解决这个问题。
编辑:我刚刚发现如果我手动设置更新命令,使用
adapter.UpdateCommand = new OdbcCommand("update Item set Location = 'SW' where \"No.\" = 'AA0182'");
它工作得很好。但是我不能使用该方法,因为我需要更改多条记录。
【问题讨论】:
-
未能在提供的代码中找到指定的查询
UPDATE Item SET ...!你确定你在问题中添加了正确的代码吗? -
是的,这正是我刚刚使用的代码。
-
您已经在表上创建了触发器?你确定错误只是因为这个代码吗?
-
不,我没有创建触发器。
-
您真的在列名(“No.”)中有一个点(.)吗?你能试着把那一列去掉,看看它是否有效?
标签: c# .net ado.net odbc navision