标签: dbnull

DBNull的简洁用法?(三元?)

似乎三元运算符中存在某种类型的混淆.我知道这已经在其他SO线程中得到了解决,但它始终是无效的.另外,对于我的情况,我真的只是在寻找更好的方法.

我希望能够使用

proc.Parameters[PARAM_ID].Value = 
    string.IsNullOrEmpty(dest.Id) ? DBNull.Value : dest.Id;
Run Code Online (Sandbox Code Playgroud)

但相反,我坚持这个:

if (string.IsNullOrEmpty(dest.Id))
{
    proc.Parameters[PARAM_ID].Value = DBNull.Value;
}
else
{
    proc.Parameters[PARAM_ID].Value = dest.Id;
} 
Run Code Online (Sandbox Code Playgroud)

三元运算符失败是因为DBNull和字符串之间没有可能的转换,并且看起来很傻,因为值似乎是对象,编译器将它踢回给我,我不得不关心.这个问题的可空版本的答案是将null转换为字符串并完成它; 但是DBNull不能转换成字符串,所以没有运气.

有没有更简洁的方法来做到这一点(顺便说一下,没有使用nullables?)

谢谢!

c# ado.net dbnull ternary-operator

9
推荐指数
3
解决办法
4156
查看次数

如何处理从"DBNull"类型到"String"类型的转换无效

我需要一些关于如何处理以下内容的建议: - 我有一个数据字段misc_text_2,其类型为varchar(25)并允许NULL.现在,如果我使用以下语法

<asp:Label ID="lblPrinter" runat="server"  Text='<%# iif(eval("misc_text_2") is dbnull.value, "", iif(eval("misc_text_2") like "NA", "None", iif(eval("misc_text_2") like "KP1", "Kitchen Printer 1", iif(eval("misc_text_2") like "KP2", "Kitchen Printer 2", iif(eval("misc_text_2") like "KP3", "Kitchen Printer 3", iif(eval("misc_text_2") like "BP1", "Bar Printer 1", iif(eval("misc_text_2") like "BP2", "Bar Printer 2", iif(eval("misc_text_2") like "BP3", "Bar Printer 3", Eval("misc_text_2")))))))))%>'></asp:Label>
Run Code Online (Sandbox Code Playgroud)

我一直在收到错误异常详细信息:System.InvalidCastException:从类型'DBNull'到类型'String'的转换无效.

我知道我错过了什么,但是......

提前致谢

asp.net dbnull

8
推荐指数
2
解决办法
4万
查看次数

如何在Entity Framework中将字段设置为DBNull

如何在Entity Framework中将字段设置为DBNull?字段是强类型的,因此您不能将它设置为等于DBNull.Value,我没有找到任何方法将字段设置为DBNull.看起来这是必要的事情,但经过大量的谷歌研究后,我一无所获.

我正在尝试使用vb.net在Entity Framework中设置datetime字段.这需要我写

 myEntity.mydate = Nothing
Run Code Online (Sandbox Code Playgroud)

这不会将该字段设置为null,而是将其设置为默认日期值,该值不是SQL Server中的有效日期值.

dbnull entity-framework

8
推荐指数
2
解决办法
2万
查看次数

如何在我的强类型数据集中包含DBNull作为值?

我在我的.NET应用程序中创建了一个强类型数据集(MyDataSet).为简单起见,我们假设它有一个DataTable(MyDataTable),一列(MyCol).MyCol的DataType属性设置为"System.Int32",其AllowDBNull属性设置为"true".

我想手动创建一个新行,并将其添加到此数据集中.我创建了没有问题的行,例如:

MyDataSet.MyDataTableRow myRow = MySimpleDataSet.MyDataTable.NewItemRow();
Run Code Online (Sandbox Code Playgroud)

精细.但是,当我尝试将值设置为DBNull时:

myRow.MyCol = DBNull.Value;
Run Code Online (Sandbox Code Playgroud)

我被告知我不能这样做......它无法将其转换为int.从某种意义上说,这是有道理的,因为我已经将它定义为一个int ...但是我怎么能在那里获得DBNull呢?我不应该在那里有DBNull吗?这不是AllowDBNull属性的用途吗?

我显然错过了一些有趣的东西.有人可以帮忙解释它是什么吗?

编辑:我也试过输入"int?" 作为DataType,但是当我输入它时,Visual Studio会抛出一个错误,说"Column需要一个有效的DataType".

.net dbnull strongly-typed-dataset

8
推荐指数
1
解决办法
6666
查看次数

C# ??null合并运算符问题

我已将Class Person属性Birthday定义为空的DateTime?,那么为什么空融合运算符不应该在以下示例中起作用?

cmd.Parameters.Add(new SqlParameter("@Birthday",
   SqlDbType.SmallDateTime)).Value =       
     person.Birthday ?? DBNull.Value; 
Run Code Online (Sandbox Code Playgroud)

我得到的编译器错误是"操作员'??' 不能应用于'System.DateTime?'类型的操作数 和'System.DBNull'"

以下也出现了编译错误:

cmd.Parameters.Add(new SqlParameter("@Birthday", 
  SqlDbType.SmallDateTime)).Value = 
   (person.Birthday == null) ? person.Birthday:DBNull.Value;
Run Code Online (Sandbox Code Playgroud)

我按照Refactor的建议添加了一个强制转换为(对象),然后编译,但是没有正常工作,并且在两种情况下,值都存储在sqlserver db中为null.

SqlDbType.SmallDateTime)).Value =       
         person.Birthday ?? (object)DBNull.Value;
Run Code Online (Sandbox Code Playgroud)

有人能解释一下这里发生了什么吗?

我需要使用以下笨拙的代码:

   if (person.Birthday == null) 
    cmd.Parameters.Add("@Birthday", SqlDbType.SmallDateTime).Value 
      = DBNull.Value;
     else cmd.Parameters.Add("@Birthday", SqlDbType.SmallDateTime).Value = 
          person.Birthday;
Run Code Online (Sandbox Code Playgroud)

c# dbnull null-coalescing-operator

8
推荐指数
2
解决办法
4263
查看次数

处理DateTime DBNull

我已经在SO上看过很多很多这样的版本,但是它们似乎都不能满足我的需求.

我的数据来自供应商数据库,该数据库允许DateTime字段为null.首先,我将数据拉入DataTable.

using (SqlCommand cmd = new SqlCommand(sb.ToString(), conn))
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
    da.Fill(dt);
}
Run Code Online (Sandbox Code Playgroud)

我正在将DataTable转换为List <>进行处理.

var equipment = from i in dt.AsEnumerable()
    select new Equipment()
    {
        Id = i.Field<string>("ID"),
        BeginDate = i.Field<DateTime>("BeginDate"),
        EndDate = i.Field<DateTime>("EndDate"),
        EstimatedLife = i.Field<double>("EstimatedLife")
    }
Run Code Online (Sandbox Code Playgroud)

那么,在这个实例中如何检查DBNull?我试着写一个方法.

    public DateTime CheckDBNull(object dateTime)
    {
        if (dateTime == DBNull.Value)
            return DateTime.MinValue;
        else
            return (DateTime)dateTime;
    }
Run Code Online (Sandbox Code Playgroud)

c# datetime dbnull

8
推荐指数
3
解决办法
4万
查看次数

Powershell和SQL参数.如果为空字符串,则传递DBNull

我有这个参数:

$objDbCmd.Parameters.Add("@telephone", [System.Data.SqlDbType]::VarChar, 18) | Out-Null;
$objDbCmd.Parameters["@telephone"].Value = $objUser.Telephone;
Run Code Online (Sandbox Code Playgroud)

字符串$objUser.Telephone可以为空.如果它是空的,我怎么能把它转换成[DBNull]::Value

我试过了:

if ([string]:IsNullOrEmpty($objUser.Telephone)) { $objUser.Telephone = [DBNull]::Value };
Run Code Online (Sandbox Code Playgroud)

但这给了我错误:

使用"0"参数调用"ExecuteNonQuery"的异常:"无法将参数值从ResultPropertyValueCollection转换为String."

如果我将它转换为字符串,它会插入一个空字符串"",而不是DBNull.

如何实现这一目标?

谢谢.

sql powershell dbnull

7
推荐指数
2
解决办法
2万
查看次数

DBNull怎么能不等于DBNull

我有以下代码行

if (DBNull.Value.Equals(o) || o != null)
Run Code Online (Sandbox Code Playgroud)

这里oobject o in row.ItemArray 我不断收到的错误- >

Xml type "List of xdt:untypedAtomic" does not support a conversion from Clr type "DBNull" to Clr type "String".

我不明白的是,当我单步执行我的代码时,if应该抓住这个并执行我的替代操作,但事实并非如此?

有人可以为我解释一下.

谢谢!

.net c# null dbnull object

7
推荐指数
2
解决办法
8818
查看次数

如何安全地将可空结果从sqlreader转换为int?

我有一个包含空值的表,我需要使用SqlDataReader从表中获取数据.我无法弄清楚如何安全地将DBNull强制转换为int.

我现在正以这种方式做到这一点:

...
reader = command.ExecuteReader();
while (reader.Read()) {
     int y = (reader["PublicationYear"] != null) ? Convert.ToInt32(reader["PublicationYear"]) : 0;
     ...
}
...
Run Code Online (Sandbox Code Playgroud)

但是Object cannot be cast from DBNull to other types.当PublicationYear为null时获取.

我怎样才能安全地获得价值?

谢谢.

c# asp.net null dbnull sqldatareader

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

是DBNull与DBNull.Value.Equals()

我很好奇使用if(some_value is DBNull)对比的利弊是什么if(DBNull.Value.Equals(some_value)).我个人更喜欢if(some_value is DBNull)因为我发现它更具可读性.我知道微软建议使用if(DBNull.Value.Equals(some_value))根据https://msdn.microsoft.com/en-us/library/system.dbnull%28v=vs.110%29.aspx.

c# dbnull

7
推荐指数
1
解决办法
355
查看次数