Запрос TableAdapter с параметром Int64 через соединение данных ODBC - PullRequest
1 голос
/ 30 июня 2009

В этом случае конструктор Visual Studio создает метод, который принимает параметр как int, даже если соответствующий столбец базы данных указан как System.Int64.

Это запрос, указанный в «Мастере настройки запроса TableAdapter»:

SELECT *
FROM my_table
WHERE "status_id" = ?

Опять же, status_id имеет тип System.Int64. Вот что генерирует дизайнер:

public virtual DataSet1.MyDataTable GetDataByStatusId(int status_id) { ... }

Почему параметр не является Int64? Это ошибка в Visual Studio? (Я использую 2008 SP1.) Я могу в конечном итоге просто вручную использовать класс OdbcCommand.

Редактировать: я использую PostgreSQL, и столбец указан как тип bigint.

Ответы [ 2 ]

2 голосов
/ 01 июля 2009

Хорошо, я понял это. Visual Studio должен был быть достаточно умным, чтобы сделать параметр длинным (Int64), но вот как его установить вручную:

В конструкторе наборов данных Visual Studio выберите метод, созданный мастером добавления запросов - например, элемент с надписью «FillByStatusId, GetDataByStatusId (status_id)». В окне свойств найдите строку «Параметры» и выберите «...». Это позволит вам вручную установить для «DbType» значение Int64 (или любое другое), что решило мою проблему.

0 голосов
/ 30 июня 2009

Является ли тип базы данных длинным? Int64 будет создан дизайнером, если у вас есть тип автонумерации в MS Access (что соответствует long (int64)) ... также, какую базу данных вы используете?

Edit: с типом данных bigint вы должны иметь возможность использовать числа до 9223372036854775807 ... и с int32 до 2147483647. Другими словами, вы используете PostgreSQL, эквивалентный int64, который может принимать любые int до 9223372036854775807. Int32 работает, потому что число всегда будет действительным в этом диапазоне. В .Net вы можете неявно конвертировать многие типы данных. Например, умножьте int на 1,0, и он станет двойным. Нет необходимости явно приводить или преобразовывать. Однако вы не можете использовать другое направление без потери данных.

...