2

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

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

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

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

5 回答 5

7

使用 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
);
于 2011-12-13T15:07:03.960 回答
2

检查空字符串然后使用是有效的:

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

如果是,例如:

if (string.IsNullOrEmpty(ProductName)) {

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

} else {

    myCommand.Parameters.AddWithValue("@ProductName", ProductName);

}
于 2011-12-13T15:05:12.337 回答
0

如果您使用 .Net 2.0 或更高版本,请考虑利用Nullable(Of T)结构。它使测试 Null 值变得非常容易,如果它们指定了一个值,您可以简单地将对象的 .Value 属性拖放到您的 TextBox 中。这些对象默认为空,所以当你去更新数据库中的记录时,如果没有指定值,你不理会变量,空值会进入你的数据库。

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

于 2011-12-13T15:08:38.783 回答
0

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

在您的数据库方面,一个干净的方法是

myCommand.Parameters.AddWithValue(
    "@ProductName",
    productName.IsNullOrEmpty() ? (object)(DBNull.Value) : productName
);
于 2011-12-13T15:09:41.817 回答
0

稍微短一点的版本:

myCommand.Parameters.AddWithValue(
    "@ProductName", 
    productName == null ? DBNull.Value : (object)productName
);
于 2011-12-13T15:12:49.687 回答