相关疑难解决方法(0)

DBNull有什么意义?

在.NET中有一个null引用,它在任何地方用来表示对象引用是空的,然后有DBNull数据库驱动程序(和其他几个)用来表示......几乎相同的东西.当然,这会产生很多混乱,转换例程必须被制作出来,等等.

那么为什么最初的.NET作者决定这样呢?对我来说没有任何意义.他们的文档也没有意义:

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

什么是关于"不存在的列"的废话?存在一列,它只是没有特定行的值.如果它不存在,我会尝试访问特定的单元格,而不是DBNull!我可以理解区分VT_NULL和之间的必要性VT_EMPTY,但是为什么不做一个COMEmpty类呢?这将是整个.NET框架中更适合的.

我错过了什么吗?任何人都可以解释为什么DBNull被发明以及它有助于解决的问题?

.net history dbnull rationale

69
推荐指数
3
解决办法
1万
查看次数

DBNull.Value作为可选参数

可以将DBNull.Value作为可选参数传递吗?我试过C#

private void CallSP(string param0, string param2 = DBNull.Value)
{
}
Run Code Online (Sandbox Code Playgroud)

它给出了错误.我需要在这个方法中调用一个Stored过程,所以我传递了DBNull.Value.在SQL Server中,'DBNull.Value'和'null'被视为相同吗?我应该传递'null'而不是'DBNull.Value'???

c# null optional

3
推荐指数
1
解决办法
1173
查看次数

什么是最好的Convert.ToSting()或只是与空字符串连接?

var item = "" + dr["someString"];
Run Code Online (Sandbox Code Playgroud)

要么

var item = Convert.ToString(dr["somestring"]);
Run Code Online (Sandbox Code Playgroud)

上述示例的性能影响是什么?

c#

3
推荐指数
1
解决办法
192
查看次数

我应该在查询中检查null或dbnull

我有一个查询,检查使用的特定类型的记录数count().

select count(*) from abc where date="some value"
Run Code Online (Sandbox Code Playgroud)

在这里,我的查询可能会返回nullDBNull?我应该检查一下吗?

c# sql-server-2008

0
推荐指数
1
解决办法
1118
查看次数

DBNull错误即将出现

我有一个数据库表

FruitCrateTable FruitCrateID, FruitCrateName, FruitGarden
Run Code Online (Sandbox Code Playgroud)

现在我还创建了一个存储过程,

CREATE procedure [dbo].[GetFruitCrate]
(
    @FruitCrateID int,
    @FruitCrateName varchar(222)
)
AS

SELECT 
    *
FROM 
    FruitCrateTable
WHERE
    FruitCrateID = @FruitCrateID
and
    FruitCrateName = @FruitCrateName 
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试使用DataAccess检查FruitGarden是否为null时,

我创建了row的实例,

 public myDataAccess.DataAccess.GetFruitCrateRow fruitCrateRow;
 //then

 if (!string.IsNullOrEmpty(fruitCrateRow.FruitGarden))
            {
//do something but i am getting error, how can i fix this issue ?
else { // do something else }
Run Code Online (Sandbox Code Playgroud)

错误,

The value for column &#39;FruitGarden&#39; in table &#39;GetFruitCrate&#39; is DBNull.</message><full>System.Data.StrongTypingException: The value for column &#39;FruitGarden&#39; in table &#39;GetFruitCrate&#39; is DBNull. ---&gt; …
Run Code Online (Sandbox Code Playgroud)

c# sql asp.net

0
推荐指数
1
解决办法
554
查看次数

无法将类型为'System.DBNull'的对象强制转换为'System.Byte []'

我有这个代码:

UploadImageControl1.BinaryData =ServiceInfoDt["SERVICE_LOGO"]!=null?(byte []) ServiceInfoDt["SERVICE_LOGO"]:null;
Run Code Online (Sandbox Code Playgroud)

BinaryData 是一个字节数组 byte[]

买我收到这个错误:

Unable to cast object of type 'System.DBNull' to type 'System.Byte[]'.
Run Code Online (Sandbox Code Playgroud)

c#

0
推荐指数
1
解决办法
8078
查看次数

使用 IIF 和 IF ELSE 时验证中的 String.IsNullOrEmpty VS IsDBNull

我不清楚,所以如果有人可以详细解释 VB.Net 的两个函数(IsDBNullString.IsNullOrEmpty)有什么区别。

下面是我问这个问题的场景,Company我的表中有一列,其值为NULL,然后我使用IIFvb.net 的函数来验证它是否然后NULL分配空字符串(“”),否则分配来自数据表的值

设想:

  1. 下面是使用String.IsNullOrEmpty,我收到转换错误:

    从类型“DBNULL”到“String”的转换无效。

    txtCompany.Text = IIf(String.IsNullOrEmpty(dtSample.Rows(grdInfo.SelectedIndex).Item("Company")).ToString, "", dtSample.Rows(grdInfo.SelectedIndex).Item("Company"))
    
    Run Code Online (Sandbox Code Playgroud)
  2. 但是,当我用IsDBNull替换 String.IsNullOrEmpty 时,验证工作正常。

    txtCompany.Text = IIf(IsDBNull(dtSample.Rows(grdInfo.SelectedIndex).Item("Company")).ToString, "", dtSample.Rows(grdInfo.SelectedIndex).Item("Company"))
    
    Run Code Online (Sandbox Code Playgroud)

编辑:

这很令人困惑,因为如果我IF ELSE使用 String.IsNullOrEmpty 进行使用条件验证(请参阅下面的示例代码),它就可以正常工作。

    If String.IsNullOrEmpty(dtSample.Rows(grdInfo.SelectedIndex).Item("Company").ToString) = True Then
        txtCompany.Text = ""
    Else
        txtCompany.Text = dtSample.Rows(grdInfo.SelectedIndex).Item("Company").ToString
    End If
Run Code Online (Sandbox Code Playgroud)

令人困惑的部分是当我使用IIF(String.IsNullOrEmpty...etc)它时它返回一个错误。但当我使用正常时IF String.IsNullOrEmpty(dtSample.Rows....etc) = True它工作正常。

任何解释将不胜感激。谢谢

sql vb.net null if-statement iif

-1
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×5

null ×2

sql ×2

.net ×1

asp.net ×1

dbnull ×1

history ×1

if-statement ×1

iif ×1

optional ×1

rationale ×1

sql-server-2008 ×1

vb.net ×1