Параметры запроса с драйвером Impala ODBC

Я использую драйвер Impala ODBC, предоставленный Cloudera. Кажется, я не могу правильно использовать параметры запроса. Например:

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();

выдает следующее исключение.

{"ОШИБКА [HY000] [Cloudera] [ImpalaODBC] (110) Ошибка при выполнении запроса в Impala: [HY000]: AnalysisException: синтаксическая ошибка в строке 1: \ nВСТАВИТЬ В ТАБЛИЦУ тестовые ЗНАЧЕНИЯ (?,?) \ N
^ \ nОбнаружен: неожиданный символ \ nОжидаемый: CASE, CAST, EXISTS, FALSE, IF, INTERVAL, NOT, NULL, TRUNCATE, TRUE, IDENTIFIER \ n \ nПРИЧИНОВАН: Исключение: синтаксическая ошибка \ n "}

Что должно управлять параметрами запроса (и заменой? На значения), библиотекой ODBC или драйвером? Кажется, это драйвер, а в данном случае он не реализован ... И обидно, потому что я не могу использовать подготовленный оператор.

Кто-нибудь знает, как использовать параметры запроса с драйвером Impala ODBC?


person Arzhr    schedule 04.12.2015    source источник
comment
Я обнаружил, что мне нужно избегать точки с запятой в конце. В вашем примере "command.CommandText = "INSERT INTO TABLE test VALUES(?, ?)"; правильно, но command.CommandText = "INSERT INTO TABLE test VALUES(?, ?);"; выдаст мне ту же ошибку, что и вы. Это не ваша проблема, но подумал, что это может помочь другим.   -  person Patrick Szalapski    schedule 25.04.2018


Ответы (1)


INSERT INTO TABLE - это специфический синтаксис Impala. Чтобы использовать Impala ODBC для выполнения INSERT с параметрами, вам понадобится синтаксис SQL 92, который равен INSERT INTO <table name> ...

Можете ли вы попробовать следующий синтаксис и посмотреть, поможет ли он?

INSERT INTO test VALUES(?, ?)

person Holman    schedule 04.12.2015
comment
Он работает с INSERT INTO test VALUES (?,?). Однако он не работает с INSERT INTO test (col1, col2) VALUES (?,?), Но меня будет достаточно. Спасибо - person Arzhr; 07.12.2015