Как создать IDbDataParameter с нулевым значением?

2

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

 bool sql = true;
 // ....
 List<IDbDataParameter> parameters = new List<IDbDataParmeter>();
 // adding values...
 object objVal = 1;
 parameters.Add(
    sql ? new SqlParameter("@colIntA", objVal) : 
          new OracleParamer(":colIntA", objVal));
 // this would not work, what should I add?
 objVal = string.Empty;
 parameters.Add(
    sql ? new SqlParameter("@colIntB", objVal) : 
          new OracleParamer(":colIntB", objVal));

Не уверен, что я использую значение DbNull для db, и это также относится к SQL или Oracle?

Теги:

2 ответа

2

Вы пытаетесь назначить пустую строку ('') для параметра int там, так что да, это не сработает.

Чтобы представить нулевое значение, не зависящее от базы данных, используйте DbNull.Value.

 new SqlParameter("colIntB", DbNull.Value)

(Обратите внимание, что я остановился на "@", который работает в моем опыте с Sqlparameters. Я не уверен, что вы можете сделать то же самое с ":" для Oracle.)

Один дополнительный совет: используйте свое соединение для создания команды и команду для создания параметров. Это создаст экземпляры нужного класса в зависимости от типа базового соединения:

IDbConnection conn = sql ? new SqlConnection(...) : new OracleConnection(...);

// this will give you either an SqlCommand or an OracleCommand
IDbCommand cmd = conn.CreateCommand();

// this will give you either an SqlParameter or an OracleParameter
IDbDataParameter param1 = cmd.CreateParameter();
param1.ParameterName = "colIntB";
param1.Value = objVal;

cmd.Parameters.Add(param1);
  • 0
    Очень интересный момент по получению параметра. Если у меня есть список параметров, мне может понадобиться создать цикл для создания, задания имени, задания значения и задания направления, если это необходимо. Спасибо!
  • 0
    Дэвид - также взгляните на мой метод расширения AddInputParameters. Делает вещи действительно легкими: madprops.org/blog/…
Показать ещё 4 комментария
1

Используйте DbNull.Value. Это будет работать для любого источника данных, совместимого с ADO.NET(как поставщиков SQL, так и Oracle), поскольку поставщик должен знать, что делать, когда он встречает значение DbNull.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню