Как добавить параметр для типов перечислений postgres в C # - PullRequest
2 голосов
/ 15 августа 2010

Привет в настоящее время проблема в том, что я хочу вставить значения в базу данных postgres, где таблица содержит самоопределяемые типы, например.

CREATE TYPE TestEnum AS ENUM ('Value1','Value2');

Когда я пытаюсь добавить параметр в C #, я всегда получаюошибка из-за неправильного NpgsqlDbType.Поэтому мой вопрос в том, какой NpgsqlDbType использовать для таких самоопределяемых типов.

var parameter = new NpgsqlParameter(":p1", NpgsqlDbType.????)
{
    Value = "Value1",
    Direction = ParameterDirection.Input
}

Спасибо за вашу помощь.Я действительно схожу с ума из-за этой проблемы.

Ответы [ 2 ]

3 голосов
/ 19 августа 2010

В конце концов, я нашел решение, которое решает проблему, хотя это не настоящее решение. Теперь я добавляю параметр NpgsqlDbType.Varchar и добавляю CAST (: p1 как «TestEnum») к SQL

, например

INSERT INTO tableName (Col) VALUES ( CAST(:p1 as "TestEnum") )

Это работает для меня, хотя я не думаю, что это очень хорошее решение из-за актеров. Если кто-то найдет лучшее решение в будущем, пожалуйста, напишите мне. ;)

0 голосов
/ 15 августа 2010

Согласно PostgreSQL 8.4.4 Документация: 8.7. Перечисляемые типы :

Значение перечисления занимает четыре байта на диске.

Это говорит о том, что они внутренне хранятся как 32-разрядное целое число . Он использует системный каталог pg_enum для сопоставления целых чисел с именами и обратно.

К сожалению, документация для NpgsqlDbType не разъясняет значение каждого из этих значений перечисления, но я предполагаю, что NpgsqlDbType.Integer может относиться к 32- бит целое число.

Однако я должен признаться, что я догадываюсь здесь. Также возможно, что NpgsqlParameter ожидает тип, представляющий данные, которые вы отправляете в БД с запросом, что является явно строкой, поэтому, если NpgsqlDbType.Integer не работает, мое следующее предположение будет NpgsqlDbType.Varchar.

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