Как создать IDbDataParameter с нулевым значением? - PullRequest
2 голосов
/ 30 июля 2009

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

 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, специфичное для БД, и это также специфично для SQL или Oracle?

Ответы [ 2 ]

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

Вы пытаетесь назначить пустую строку ('') для параметра 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);
1 голос
/ 30 июля 2009

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

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