Не уверен, почему в C # я получаю совершенно другой TypeCode из DbType в объекте параметра команды SQL? - PullRequest
1 голос
/ 20 февраля 2011

Я уверен, что кто-то собирается застрелить его в огне ... хотя концепция из того, что я вижу, выглядит хорошо ...

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

  1. Получение DbType параметра динамически .. так что с частью все в порядке - просто ссылки как: DbType ParamDBtype = cmd.Parameters [Param1Variable.DbType;
  2. Затем (глупо или нет!) Я пытаюсь получить тип внутри .NET, чтобы я мог преобразовать значение в правильный тип (потому что в моем случае я просто получаю значение / пары в виде строк .. отсюда и причина получения DbType знать в какой тип конвертировать)

Так что, очевидно, я могу сделать: TypeCode ParamDBtypeCode = cmd.Parameters [Param1Variable.DbType.GetTypeCode ();

Теперь TypeCode можно использовать при использовании оператора Convert:

Convert.ChangeType (Param1Value, ParamDBtypeCode)

Ну, это работает .. вроде, потому что у меня былparam, который был целым числом, и преобразование преобразовало это значение в int .. но тогда у меня был параметр, который был AnsiString DbType, и TypeCode этого параметра вернулся как int16 все еще ???

Кто-нибудьчасОбъявление такого рода проблемы, или может указать мне в лучшем направлении?

По сути, я пытаюсь динамически назначать / преобразовывать значения для хранимой процедуры ..

Спасибо за любую помощь ..

1 Ответ

1 голос
/ 20 февраля 2011

То, что вы видите, имеет значение object.GetTypeCode(), а в случае DbType значение равно , перечисление . И код типа перечисления - это просто базовый тип перечисления: int в данном случае. Он будет сообщать int для каждые DbType - даже те, которые не существуют:

var dbtype = (DbType)(-12341);
var typeCode = dbtype.GetTypeCode(); // Int32

То, что вы пытаетесь сделать, не имеет ничего общего с DbType GetTypeCode(). Проблема здесь в том, что " очевидно ".

Если вы действительно хотите сопоставить перечисление с чем-то другим, switch идеален. Вполне возможно, что вам потребуется предоставить картографирование самостоятельно.

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