如何使用null-value创建IDbDataParameter?

时间:2009-07-30 02:20:41

标签: c# sql oracle

我在参数列表中添加了一个空值,用于向表中插入值,该表接受一些空值。这是我的示例代码:

 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));

不确定我是否使用了特定于db的DbNull值,是否也是SQL或Oracle特定的?

2 个答案:

答案 0 :(得分:2)

你试图在那里为一个int参数分配一个空字符串(''),所以是的,那是行不通的。

要表示与数据库无关的空值,请使用DbNull.Value

 new SqlParameter("colIntB", DbNull.Value)

(请注意,我已经离开了“@”,这符合我使用Sql参数的经验。我不确定你是否可以对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 :(得分:1)

使用DbNull.Value。这适用于任何与ADO.NET兼容的数据源(SQL和Oracle提供程序),因为提供程序在遇到DbNull值时知道该怎么做。