【发布时间】:2016-03-09 15:58:51
【问题描述】:
我正在使用 Cloudera 提供的 Impala ODBC 驱动程序。我似乎无法正确使用查询参数。 例如:
OdbcCommand command = DbConnection.CreateCommand();
command.CommandText = "INSERT INTO TABLE test VALUES(?, ?)";
command.Parameters.Add("key", OdbcType.VarChar).Value = "csharp";
command.Parameters.Add("val", OdbcType.VarChar).Value = "test";
command.ExecuteNonQuery();
抛出以下异常。
{"ERROR [HY000] [Cloudera][ImpalaODBC] (110) 执行时出错 Impala 中的查询:[HY000]:AnalysisException:行中的语法错误 1:\nINSERT INTO TABLE 测试值(?, ?)\n
^\n遇到:意外字符\n预期:CASE、CAST、EXISTS、 FALSE、IF、INTERVAL、NOT、NULL、TRUNCATE、TRUE、标识符\n\nCAUSED BY:异常:语法错误\n"}
哪个应该管理查询参数(以及按值替换 ?)、ODBC 库还是驱动程序?它似乎是驱动程序,在这种情况下,它没有实现......而且很遗憾,因为我不能使用准备好的语句。
有人知道在 Impala ODBC 驱动程序中使用查询参数的方法吗?
【问题讨论】:
-
我发现我需要避免尾随分号。在您的示例中,
"command.CommandText = "INSERT INTO TABLE test VALUES(?, ?)";是正确的,但command.CommandText = "INSERT INTO TABLE test VALUES(?, ?);";会给我同样的错误。这不是您的问题,但认为它可能对其他人有所帮助。