我用C#编写程序,通过ODBC自动在Navision数据库中插入数据。我通过调用OdbcDataAdapter.Fill()方法填充DataTable对象。更改某些值后,我想使用OdbcDataAdapter.Update()更新原始数据库。然而,这总是导致:
错误[42000] [Simba] [SimbaEngine ODBC驱动程序] UPDATE项目设置位置=? WHERE((编号<>> =?)AND((?= 1 AND位置为空)或(位置=?))) 错误[42000] [Simba] [SimbaEngine ODBC驱动程序]语法错误。
这是代码:
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);
}
我希望有人可以帮助我。
编辑:我刚发现如果我手动设置update-command,使用
adapter.UpdateCommand = new OdbcCommand("update Item set Location = 'SW' where \"No.\" = 'AA0182'");
它完美无缺。但是我无法使用该方法,因为我需要更改多个记录。
答案 0 :(得分:0)
我自己找到了解决方案。由于某些列名称包含在引号中而发生错误。我需要设置命令构建器的QuotePrefix和QuoteSuffix属性。
以下代码有效:
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);
builder.QuotePrefix = builder.QuoteSuffix = "\"";
adapter.Fill(Item);
Item.Rows[0].BeginEdit();
Item.Rows[0]["Location"] = "TC";
Item.Rows[0].EndEdit();
adapter.UpdateCommand = builder.GetUpdateCommand();
adapter.Update(Item);
connection.Close();
}