处理SQL数据库中的空int/char值的最佳实践是什么?

12 浏览
0 Comments

处理SQL数据库中的空int/char值的最佳实践是什么?

我有一个数据库,保存着用户的可选个人资料。在个人资料中,我有字符串、字符(用于表示性别的M或F)和整数。

我遇到了一个问题,我尝试将用户的性别放入我的个人资料对象的属性中,但应用程序崩溃了,因为它不知道如何处理返回的空值。

我尝试将数据转换为适当的类型

char sex = (char)dt.Rows[0]["Sex"];

但这并没有解决我的问题。然后我尝试将类型更改为Nullable和Nullable,并且仍然遇到转换问题。我目前找到的解决办法如下:

object.sex = null;  
if(dt.Rows[0]["Sex"] != DBNull.Value)
      object.sex = (char)dt.Rows[0]["Sex"];
object.WorkExt = null;
if(dt.Rows[0]["WorkExt"] != DBNull.Value)
      object.WorkExt = (int)dt.Rows[0]["WorkExt"];

有没有更简单或更好的方法来做到这一点?或者我基本上走在正确的道路上了吗?

0
0 Comments

处理来自SQL数据库的空int/char的最佳实践是什么?

在处理未经类型化的数据集时,您必须使用以下代码中的其中一种模式。如果该代码不明确,请告诉我,我将进行编辑直到它变得明确为止。这是一个非常常见的问题,应该只有一个正确的答案。

using System;
using System.Data;
class Program
{
    static void Main(string[] args)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("test", typeof(char));
        dt.Columns["test"].AllowDBNull = true;
        DataRow dr = dt.Rows.Add();
        char? test;
        try
        {
            test = (char?)dr["test"];
        }
        catch (InvalidCastException)
        {
            Console.WriteLine("Simply casting to a nullable type doesn't work.");
        }
        test = dr.Field("test");
        if (test == null)
        {
            Console.WriteLine("The Field extension method in .NET 3.5 converts System.DBNull to null.");
        }
        test = (dr["test"] is DBNull) ? null : (char?)dr["test"];
        if (test == null)
        {
            Console.WriteLine("Before .NET 3.5, you have to check the type of the column's value.");
        }
        test = (dr["test"] == DBNull.Value) ? null : (char?)dr["test"];
        if (test == null)
        {
            Console.WriteLine("Comparing the field's value to DBNull.Value is very marginally faster, but takes a bit more code.");
        }
        // now let's put the data back
        try
        {
            dr["test"] = test;
        }
        catch (ArgumentException)
        {
            Console.WriteLine("You can't set nullable columns to null.");
        }
        dr.SetField("test", test);
        if (dr["test"] is DBNull)
        {
            Console.WriteLine("Again, in .NET 3.5 extension methods make this relatively easy.");
        }
        dr["test"] = (object)test ?? DBNull.Value;
        if (dr["test"] is DBNull)
        {
            Console.WriteLine("Before .NET 3.5, you can use the null coalescing operator, but note the awful cast required.");
        }
        Console.ReadLine();
    }
}

这段代码展示了处理空int/char的几种模式。通过使用扩展方法和条件语句,可以在不同版本的.NET中处理这些情况。这些方法包括使用`Field`扩展方法、检查字段值的类型以及将字段值与`DBNull.Value`进行比较。还演示了如何将数据重新放回数据库中。

处理空int/char的最佳实践是根据具体情况选择适当的方法,以确保从数据库中获取的空值能够正确地处理和转换。

0
0 Comments

从SQL数据库中处理空int/char的最佳实践是什么?

在处理SQL数据库中的空int/char时,经常会遇到一些问题。一个常见的问题是如何正确地处理空值,以避免错误或异常。

出现此问题的原因是在数据库中可能存在空值。当查询数据库时,有时会返回空值,这可能是因为数据尚未填充或数据不适用于特定的记录。在这种情况下,需要在代码中进行适当的处理,以避免出现错误或异常。

为了解决这个问题,有几种最佳实践可以考虑:

1. 使用DBNull.Value进行检查和处理:

在从数据库中检索值时,可以使用DBNull.Value进行检查和处理。可以使用以下代码进行检查:

int? myIntValue = reader.IsDBNull(0) ? null : (int?)reader.GetInt32(0);

该代码将首先检查数据库中的值是否为空。如果值为空,它将分配一个空的int变量。否则,它将分配从数据库中检索到的int值。

2. 使用COALESCE函数:

另一种处理空值的方法是使用SQL中的COALESCE函数。COALESCE函数返回第一个非空表达式。可以使用以下代码:

SELECT COALESCE(myColumn, 0) AS myColumn FROM myTable;

这将返回myColumn的值,如果myColumn的值为空,则返回0。

3. 使用ISNULL函数:

还可以使用SQL中的ISNULL函数来处理空值。ISNULL函数返回第一个非空表达式。可以使用以下代码:

SELECT ISNULL(myColumn, 0) AS myColumn FROM myTable;

这将返回myColumn的值,如果myColumn的值为空,则返回0。

这些是处理SQL数据库中的空int/char的最佳实践。通过正确地处理空值,可以避免错误和异常,并确保代码的稳定性和可靠性。

参考文献:

- [Most efficient way to check for DBNull and then assign to a variable?](https://stackoverflow.com/questions/221582)

0
0 Comments

在处理来自SQL数据库的空int/char时,最佳实践是使用可空类型。可空类型专门为此目的而设计!使用'as char?'代替'(char?)'。

class Foo {
    char? sex;
}
Foo object;
object.sex = dt.Rows[0]["Sex"] as char?;

不幸的是,可空类型并不是为此而设计的,如果你测试这段代码,你会发现。如果DataColumn的AllowDBNull属性被设置,那么该列中的null值是DBNull.Value而不是null。你的代码会抛出InvalidCastException异常。

从什么时候开始,'as'会抛出InvalidCastException异常?

0