在.NET中,有null引用,它在任何地方都用来表示对象引用是空的,然后是DBNull,数据库驱动程序(和其他几个数据库驱动程序)使用它来表示.差不多都是一样的东西.当然,这会创建大量的念力,转换 routine 必须大量创建,依此类推.

那么,原版为什么要这么做呢.网络作者决定这样做吗?对我来说这毫无意义.他们的文件也毫无意义:

DBNull类表示一个不存在的值.例如,在数据库中,表行中的一列可能不包含任何数据.也就是说,该列被认为根本不存在,而不仅仅是没有值.DBNull对象表示不存在的列.此外,COM interop使用DBNull类来区分表示不存在值的VT_NULL变量和表示未指定值的VT_EMPTY变量.

"专栏不存在"是什么废话?列存在时,它只是没有特定行的值.如果它不存在,我会在try 访问特定单元格时遇到异常,而不是DBNull!我能理解区分VT_NULLVT_EMPTY的必要性,但为什么不改为COMEmpty级呢?这将是一个更整洁的整体适合.NET框架.

我错过什么了吗?谁能解释一下为什么DBNull会被发明,以及它有助于解决哪些问题?

推荐答案

关键是在某些情况下,数据库值为null和.净空值.

例如如果使用ExecuteScalar(返回结果集中第一行的第一列),返回空值,则表示执行的SQL没有返回任何值.如果返回DBNull,则表示SQL返回了一个值,该值为NULL.你需要能够分辨出其中的差别.

.net相关问答推荐

升级到.NET8后,SignalR(在坞站容器上)网关损坏

如何在dotnet中使用OpenTelemetry Prometheus导出器导出多个版本的度量?

仅使用 .NET GetBytes 方法转换有效字节而不创建问号

如何在 Windows 窗体上显示 ClickOnce 版本号

将日期时间转换为日期格式 dd/mm/yyyy

如何中止任务,如中止线程(Thread.Abort 方法)?

抛出 ArgumentNullException

如何明智地使用 StringBuilder?

IEnumerable Count() 和 Length 的区别

获取当前方法的名称

在 JavaScript 中使用 String.Format?

DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") 返回上午时间而不是下午时间?

您可以使用 Xamarin 开发 Linux 应用程序吗?

ConcurrentDictionary TryRemove 何时返回 false

从流中获取 TextReader?

使用 DateTime.ToString() 时获取日期后缀

为什么 .NET 中没有 Tree 类?

MemoryCache 不遵守配置中的内存限制

可以从 C# 调用 C++ 代码吗?

名称 <...> 不存在于命名空间 clr-namespace <...>