C# - OdbcDataAdapter.Update()导致语法错误
问题描述:
我正在用C#编写一个程序,通过ODBC自动将数据插入到Navision数据库中。我通过调用OdbcDataAdapter.Fill()方法填充DataTable对象。更改一些值后,我想使用OdbcDataAdapter.Update()更新原始数据库。然而,这总是导致:C# - OdbcDataAdapter.Update()导致语法错误
错误[42000] [Simba] [SimbaEngine ODBC Driver] UPDATE Item SET Location =? ((No. < < ??? >> =?)AND((?= 1 AND位置为NULL)或(位置=?))) 错误[42000] [Simba] [SimbaEngine ODBC Driver] Syntax Error。
这是代码:
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'");
它完美的罚款。但是我不能使用这种方法,因为我需要更改多个记录。
答
我自己找到了解决方案。由于某些列名称使用引号包裹,因此发生错误。我需要设置命令生成器的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();
}
无法找到指定的查询'UPDATE项设置...'在提供的代码!你确定你已经添加了正确的代码与问题? –
是的,这正是我刚刚使用的代码。 – tubu
你在表格上创建了触发器吗?你确定这个错误只是因为这个代码吗? –