ASP.Net C#CreateParameter,带有空字符串

时间:2011-03-10 21:14:59

标签: c# asp.net oracle ora-01400

在我的ASP.net C#web项目中,我有一个包含参数的查询命令对象。我使用以下代码填充参数:

DbCommand command = conn.CreateCommand();
command.CommandText = query; 
DbParameter param = command.CreateParameter();
param.ParameterName = parameter;
param.DbType = DbType.String;
param.Value = value;

此代码适用于除空字符串之外的所有字符串。如果我将输入字段留空,则会将值传递为“”。如果发生这种情况,我会收到以下异常:

ORA-01400: cannot insert NULL into (string)

有没有办法允许我在数据库中插入空字符串?

我使用Oracle数据库,我使用System.Data.OracleClient作为提供程序。

3 个答案:

答案 0 :(得分:3)

如果要插入空字符串,则必须允许NULL值。否则,Oracle会将空字符串静默转换为NULL,您将获得异常。

另一种选择是插入一个空格' '的空字符串,但我认为这会很痛苦。

以下是有关Oracle为何(非标准)方式执行此操作的更多信息: Why does Oracle 9i treat an empty string as NULL?

答案 1 :(得分:0)

如果值为null,请设置param.Value = DBNull.Value,而不是将其设置为null:

if (value == null)
{
    param.Value = DBNull.Value;
}
else
{
    param.Value = value;
}

答案 2 :(得分:0)

param.Value = string.IsNullOrEmpty(value) ? DBNull.Value : value;