是否可以传递一个参数为DB.Null,并在数据库中设置一个与该值相等的值

本文关键字:一个 设置 数据库 DB 参数 Null 是否 | 更新日期: 2023-09-27 18:17:48

我正在从数据库(1条记录)中提取数据,并将每个值放在文本框或下拉列表中。其中一些值是DB.null。如果它们是,我将它们每个转换为"(空白)。然而,一旦用户修改了文本框/下拉列表,他们可以"保存"新的结果。我的问题是:

如果用户留下空白,我希望能够保持值为DB.null。有办法做到这一点吗?

另外,是否有可能,如果有一个值在一个文本框和用户决定删除它,我也可以将其转换为DB.Null?以下是我试图给你们一些想法:

productName != ""
    ? myCommand.Parameters.AddWithValue("@ProductName", productName)
    : myCommand.Parameters.AddWithValue("@ProductName", DBNull.Value);

是否可以传递一个参数为DB.Null,并在数据库中设置一个与该值相等的值

使用SQL Server,我相信您可以互换使用nullDBNull.Value来设置值为NULL

我也会把你的代码改成这样:

myCommand.Parameters.AddWithValue(
    "@ProductName",
    // this requires a cast as ?: must return the same type
    String.IsNullOrWhiteSpace(productName)
        ? (object)DBNull.Value
        : (object)productName
);

或者使用null且没有显式强制转换:

myCommand.Parameters.AddWithValue(
    "@ProductName",
    ! String.IsNullOrWhiteSpace(productName) ? productName : null
);

可以检查空字符串,然后使用:

myCommand.Parameters.AddWithValue("@ProductName", DBNull.Value)

,如

if (string.IsNullOrEmpty(ProductName)) {
    myCommand.Parameters.AddWithValue("@ProductName", DBNull.Value);
} else {
    myCommand.Parameters.AddWithValue("@ProductName", ProductName);
}

如果您正在使用。net 2.0或更高版本,请考虑利用Nullable(Of T)结构。它使测试Null值变得非常容易,如果对象指定了一个值,你可以简单地将。value属性放到TextBox中。这些对象默认为null,因此当您要更新数据库中的记录时,如果没有指定值,则保留该变量,null将使其进入数据库。

我承认一开始有一点奇怪(你必须记住在绑定到一个TextBox时使用。value属性),但在最初的障碍之后,如果你要处理很多可能有空值的数据库字段,这个结构是相当方便的。

稍短的版本:

myCommand.Parameters.AddWithValue(
    "@ProductName", 
    productName == null ? DBNull.Value : (object)productName
);

最好不要将以数据为中心的类型(如DBNull)与TextBox绑定。虽然它可能使您的代码在数据端看起来更干净,但没有内置的方法来自动将空字符串转换为DBNull

在你的数据库端一个干净的方式是

myCommand.Parameters.AddWithValue(
    "@ProductName",
    productName.IsNullOrEmpty() ? (object)(DBNull.Value) : productName
);