我试图使用客户端访问ODBC驱动程序使用以下代码从.NET运行针对DB2数据库的参数化查询:
var db2Cmd = new OdbcCommand("INSERT INTO presnlats (LAT) VALUES (@LAT)",db2Conn); db2Cmd.Parameters.AddWithValue("@LAT",insertValue); Console.Out.WriteLine(db2Cmd.ExecuteNonQuery());
执行时,抛出OdbcException:
ERROR [42S22] [IBM][iSeries Access ODBC Driver][DB2 UDB]sql0206 – Column @LAT not in specified tables.
The internets似乎暗示客户端访问ODBC驱动程序支持参数化查询,但此错误似乎表示不同.提供的代码有什么问题吗?
解决方法
你试过用过吗?作为占位符而不是@LAT?
var db2Cmd = new OdbcCommand("INSERT INTO presnlats (LAT) VALUES (?)",db2Conn); db2Cmd.Parameters.AddWithValue("LAT",insertValue); Console.Out.WriteLine(db2Cmd.ExecuteNonQuery());
这是MS Access在使用OdbcConnection / OdbcCommand时所需要的.
您只需要确保您的Parameters.AddWithValue()语句与INSERT语句中的字段列表的顺序相同.传递给AddWithValue()的第一个参数似乎并不重要,尽管按惯例我将它与字段名称相同.