PetaPoco не возвращает ожидаемые данные - PullRequest
2 голосов
/ 14 марта 2012

У меня есть тип данных BIT в одном из моих столбцов.

Я написал запрос, который делает SELECT * FROM TABLE WHERE BITCOLUMN <> @0

Работает нормально, если я передаю 1 или 0, но если я передаю 3, PetaPoco не возвращает ожидаемых результатов.

Выполнение SQL в окне запроса возвращает все записи, когда я использую 3 в качестве значения параметра.

Есть идеи?

ОБНОВЛЕНИЕ: Если я использую string SQL = "SELECT * FROM TABLE WHERE BITCOLUMN <> " + MethodParam; Это возвращает данные, как ожидалось.

Ответы [ 3 ]

4 голосов
/ 14 марта 2012

Не могли бы вы сказать мне, какой результат вы ожидаете?В соответствии с MSDN , битовый столбец может быть 1, 0 или нулевым.Он не имеет смысла для меня, когда вы передаете ему 3, так как он выберет все строки.

И мой быстрый тест показывает, что Petapoco ведет себя как ожидалось.

using (var database = new Database("sql"))
{
    string sql = "SELECT COUNT(*) FROM TBLTESTBIT WHERE BITCOLUMN <> " + "3";
    var test = database.ExecuteScalar<long>("SELECT COUNT(*) FROM TBLTESTBIT WHERE BITCOLUMN <> @0", 3);
    var test2 = database.ExecuteScalar<long>(sql);

    Console.WriteLine(test == test2); // this output true
    Console.Read();
}
0 голосов
/ 13 октября 2016

Используйте new Sql(), а не Append.

Вы должны использовать Query = new PetaPoco.Sql( сверх Query = PetaPoco.Sql.Append

0 голосов
/ 14 марта 2012

Я думаю, это будет потому, что когда вы используете параметризованную строку sql, вы передаете int со значением 3 в качестве одного из аргументов. Затем PetaPoco создаст IDataParameter для этого аргумента, и для DbType будет установлено значение DbType.Int32 по умолчанию, поскольку PetaPoco не имеет представления о типе столбца базовой таблицы.

...