【问题标题】:Query parameters with Impala ODBC driver使用 Impala ODBC 驱动程序查询参数
【发布时间】: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(?, ?);"; 会给我同样的错误。这不是您的问题,但认为它可能对其他人有所帮助。

标签: c# odbc impala


【解决方案1】:

INSERT INTO TABLE 是 Impala 特定的语法。要使用 Impala ODBC 使用参数执行 INSERT,您需要 SQL 92 语法,即INSERT INTO <table name> ...

你可以试试下面的语法,看看是否有帮助?

INSERT INTO test VALUES(?, ?)

【讨论】:

  • 它适用于 INSERT INTO 测试值(?,?)。但是,它不适用于 INSERT INTO test(col1, col2) VALUES(?, ?) 但我就足够了。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-22
  • 1970-01-01
  • 1970-01-01
  • 2015-11-03
  • 1970-01-01
  • 2022-08-06
  • 1970-01-01
相关资源
最近更新 更多