我在参数列表中添加了一个空值,用于向表中插入值,该表接受一些空值。这是我的示例代码:
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特定的?
答案 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值时知道该怎么做。