3

在我的 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 作为提供者。

4

3 回答 3

3

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

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

以下是有关 Oracle 为何采用这种(非标准)方式的更多信息: 为什么 Oracle 9i 将空字符串视为 NULL?

于 2011-03-10T21:20:41.050 回答
0

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

if (value == null)
{
    param.Value = DBNull.Value;
}
else
{
    param.Value = value;
}
于 2011-03-10T21:20:26.673 回答
0

尝试

param.Value = string.IsNullOrEmpty(value) ? DBNull.Value : value;
于 2011-03-10T21:20:50.570 回答