Я использую npg sql в качестве пакета nuget в Visual Studio 2017 с Visual Basic c. Различные команды работают очень хорошо, но ExecuteScalar всегда возвращает «ничто», хотя должно дать результат.
Команда выглядит следующим образом:
Dim ser As Integer
Dim find = New NpgsqlCommand("SELECT serial from dbo.foreigncode WHERE code = '@code';", conn)
Dim fcode = New NpgsqlParameter("code", NpgsqlTypes.NpgsqlDbType.Varchar)
find.Parameters.Add(fcode)
find.Prepare()
fcode.Value = "XYZ"
ser = find.ExecuteScalar() ==> nothing
Когда командная строка копируется как Значение во время отладки и вставка в инструмент запросов PGADMIN дает правильный результат. Строка определенно есть.
Различные команды, выполняемые с помощью ExecuteNonQuery (), работают хорошо, включая команды, выполняющие операторы UPDATE в рассматриваемой строке.
Когда я просматриваю свойства параметра fcode непосредственно перед ExecuteScalar, он показывает, что «fcode.DataTypeName» вызвал исключение «System.NotImplementedException».
Если я изменил свой подготовленный оператор на « SELECT @code "и установите значение параметра в произвольное значение, только это значение возвращается. Нет доступа к таблице, потому что имя таблицы не является частью SELECT в этом случае. Если я удалю WHERE CLAUSE в SELECT и просто выберу один столбец, я также ожидаю, что что-то должно быть возвращено. Но опять же, это ничего.
Да, есть столбец с именем serial. Он имеет тип bigint и не может содержать NULL. Запрос показывает, что нет ни одной строки, содержащей NULL, ни в одном столбце.
Последние выводы: я запросил другую таблицу, в которой столбец поиска и столбец результатов оказались с одинаковым типом данных. Это работает, так что синтаксис, передача параметра, подготовить et c. кажется, работает в принципе. System.NotImplementedException в свойстве DataTypeName параметра также встречается, но все равно работает. Я перестроил индекс рассматриваемой таблицы. Без изменений. Тем не менее: когда я копирую / вставляю CommandText и выполняю его в PGAdmin, он показывает правильный результат. Изменение команды и использование там простого текста без параметров и без подготовки все еще ничего не дает. Простой текст CommandText был скопирован / вставлен из PGAdmin, где он был успешно выполнен ранее. Очень странно.
Возвращение столбца поиска и столбца результатов также ничего не дает в результате.