Странная "синтаксическая ошибка в или около '201112100000'" в PostgreSQL с ODBC - PullRequest
0 голосов
/ 15 декабря 2011

Я выполняю этот запрос

select * from measTbl  where dateone>'201112100000' and dateone<'202001010000' and netcd<>99 

в 32-битном приложении c # MVC, работающем на win7 64bit на сервере PostgresSQL, с использованием 32-битного драйвера ODBC psqlODBC 9.00.0310. Я всегда получаю эту ошибку:

ERROR [42601] ERROR: syntax error at or near "201112100000";
Error while executing the query

.net код, который я использую, это

OdbcConnection conn = new OdbcConnection();
conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["CSPOSTGRES"].ToString(); ;
OdbcCommand comm = new OdbcCommand();
comm.Connection = conn;
conn.Open();
var strData= System.DateTime.Today.AddDays(-(double)giorni).ToString("yyyyMMdd")+"0000";
var commandText=String.Format ("select * from measTbl  where dateone  >'{0}' and dateone<'202001010000' and netcd<>99", strData);
comm.CommandText = strData;

OdbcDataReader reader = comm.ExecuteReader();

Самое странное, что если я использую 64-битное приложение winforms с 64-битным драйвером, тот же самый запрос работает отлично.

Я должен использовать 32-битную версию, поэтому использование 64-битной версии невозможно.

есть идеи? спасибо.

1 Ответ

1 голос
/ 15 декабря 2011

Вы присваиваете strData свойству CommandText, и это первая проблема.

var commandText=String.Format ("select * from measTbl  where dateone  >'{0}' and dateone<'202001010000' and netcd<>99",
                    strData);
comm.CommandText = commandText;

Другая проблема заключается в том, что вы comparing строк (как вы сказали, что тип данных поля dateone - varchar)).Лучше преобразовать значение поля dateone в date, если какая-либо функция в psql.

PS: попробуйте использовать параметризованный оператор SQL, чтобы избежать такого внедрения SQL и сложной конкатенации.

Например,

cmd.CommandText="select * from measTbl where (dateone>@date1 and dateone<@date2) 
                        and netcd<>@netcd"; 

Я не уверен, какой символ параметра (@,? Или :) используется с PSQL и ODBC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...