标签: nullable

具有Nullable值的SqlParameter在ExecuteNonQuery时给出错误?

我有一个SQL查询,其参数在数据库(Sql Server)中可以为null.更新方法正常工作,直到该用户在字段中放置一个空白,这将为DataTime对象生成一个空值(此对象可以为空).问题是什么时候dbCommand.ExecuteNonQuery();.

以下是我为此字段构建参数的方法:

    IDataParameter dbParam_au_id = new SqlParameter();
    dbParam_au_id.ParameterName = "@birthday";
    dbParam_au_id.Value = birthday;
    dbParam_au_id.DbType = DbType.DateTime;
    dbCommand.Parameters.Add(dbParam_au_id);
Run Code Online (Sandbox Code Playgroud)

我尝试将生日的null值转换为DBNull.Value,如下所示:

    IDataParameter dbParam_au_id = new SqlParameter();
    dbParam_au_id.ParameterName = "@birthday";
    dbParam_au_id.Value = birthday??DBNull.Value;
    dbParam_au_id.DbType = DbType.DateTime;
    dbCommand.Parameters.Add(dbParam_au_id);
Run Code Online (Sandbox Code Playgroud)

但是这段代码不能编译,我得到错误:

错误1运算符'??' 不能应用于'System.DateTime?'类型的操作数 和'System.DBNull'

任何的想法?

.net c# sql-server nullable

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

拳击/拆箱可空类型 - 为什么要实施?

通过C#在Boxing/Unboxing值类型上从CLR中提取...

在Boxing上:如果可空实例不为null,则CLR将该值从可空实例中取出并将其装箱.换句话说,值为5Nullable <Int32>被装入一个值为5boxed-Int32.

在取消装箱:取消装箱只是获取对盒装对象的未装箱部分的引用的行为.问题是盒装值类型不能简单地拆箱成该值类型的可空版本,因为盒装值中没有boolean hasValue字段.因此,当将值类型拆箱到可空版本时,CLR必须分配Nullable <T>对象,将hasValue字段初始化为true,并将value字段设置为盒装值类型中的相同值.这会影响您的应用程序性能(拆箱期间的内存分配).

为什么CLR团队为Nullable类型经历了这么多麻烦?为什么不首先将它装入Nullable <Int32>?

.net c# clr nullable

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

确定通用参数是否为Nullable类型

我有以下VB.NET函数,例如:

Public Function MyFunction (Of TData) (ByVal InParam As Integer) As TData

End Sub
Run Code Online (Sandbox Code Playgroud)

我如何在函数中确定是否TData为NULLable类型?

.net vb.net generics nullable

22
推荐指数
2
解决办法
6175
查看次数

如何使用可空列加入MySQL表?

我对MySQL有点不熟练,所以我希望我能在这里找到一些关于我的问题的建议.

基本上我有两个表,为方便起见,称它们为A和B. 两个表都有一个可以为空的C列varchar.当我使用C加入A和B时,我丢失了任何表中C为NULL的所有行.我知道这在MySQL中是正常的,但我想得到的是一个包含两个表中C为NULL的行组合的连接.我发现下面的查询似乎运行良好.

SELECT *
FROM A JOIN B
ON (A.C IS NULL AND B.C IS NULL) OR (A.C IS NOT NULL AND B.C IS NOT NULL AND A.C = B.C)
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,这个查询是我能得到的最好的,还是有办法让这个联接变得更好?谢谢!

mysql sql join nullable

22
推荐指数
1
解决办法
7023
查看次数

GetValueOrDefault如何工作?

我负责一个LINQ提供程序,它对C#代码执行一些运行时评估.举个例子:

int? thing = null;
accessor.Product.Where(p => p.anInt == thing.GetValueOrDefault(-1))
Run Code Online (Sandbox Code Playgroud)

目前上述代码由于为thingnull 而无法与我的LINQ提供程序一起使用.

虽然我已经使用C#很长时间了,但我不知道如何实现GetValueOrDefault,因此我应该如何解决这个问题.

所以我的问题是:GetValueOrDefault在调用它的实例为空的情况下如何工作?为什么不NullReferenceException抛出?

接下来的问题:我应该如何复制GetValueOrDefault使用反射的调用,因为我需要处理空值.

c# nullable

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

Nullable <T>的内存占用量是多少

An int(Int32)的内存占用为4个字节.但是什么是内存占用:

int? i = null;
Run Code Online (Sandbox Code Playgroud)

并且:

int? i = 3;
Run Code Online (Sandbox Code Playgroud)

这是一般的还是类型依赖的?

.net c# memory nullable

21
推荐指数
3
解决办法
4688
查看次数

为什么null不等于null false

我正在读这篇文章: 在SQL中获取null == null

并且一致认为,当尝试测试两个(可为空)sql列之间的相等性时,正确的方法是:

where ((A=B) OR (A IS NULL AND B IS NULL))
Run Code Online (Sandbox Code Playgroud)

当A和B为NULL时,(A = B)仍然返回FALSE,因为NULL不等于NULL.这就是需要额外检查的原因.

在测试不平等时呢?根据上面的讨论,它让我认为,为了测试不平等,我需要做一些像:

WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))
Run Code Online (Sandbox Code Playgroud)

但是,我注意到这没有必要(至少在informix 11.5上没有),我可以这样做:

where (A<>B)
Run Code Online (Sandbox Code Playgroud)

如果A和B为NULL,则返回FALSE.如果NULL不等于NULL,那么这不应该返回TRUE吗?

编辑
这些都是很好的答案,但我认为我的问题有点模糊.请允许我改写一下:

鉴于A或B都可以为NULL,是否足以检查它们的不等式

where (A<>B)
Run Code Online (Sandbox Code Playgroud)

或者我需要明确检查它:

WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))
Run Code Online (Sandbox Code Playgroud)

请参阅此主题以获得此问题的答案.

sql database null nullable

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

Linq OrderBy打破导航属性为null

使用四个表.

用户 - >具有基本用户信息,包括用户ID和 离开(int)
组 - >基本组信息,包括groupid
GroupsMembers - >表,其中包含组与其成员之间的关系,多对多关系,因此groupid和userid是列
部门 - >基本部门信息,包括deptid

我有一个fk从users表中的departmentid到departments表中的deparmtnet id.

FK从组groupid到groupsmembers groupid FK从用户userid到groupsmembers userid

这允许edmx中的组具有用户导航属性,该属性将包含该组的所有成员.

var grp = grpSource.FirstOrDefault(g => g.GroupID == groupID)
if (grp.GroupID > 0)
{
    var userQuery = from u in grp.Users
                    where !u.Deleted
                    select u;
    userQuery = userQuery.OrderBy(u => u.Department.Name);
}
Run Code Online (Sandbox Code Playgroud)

我包括Users.Department.

问题出现是因为用户不必拥有部门,因此departmentid列可以为空.如果有任何用户为departmentid为null,则orderby中断并表示u.Department为null.如果没有离开是空的,那就很有效.我需要一种基于Department.Name进行排序的方法,即使有null的离开.有什么建议?

linq-to-entities entity-framework nullable sql-order-by

21
推荐指数
1
解决办法
7990
查看次数

引用类型与Nullable类型ToString()

有人可以请你解释为什么调用ToString()一个空的引用类型会导致一个异常(在我看来这是完全合理的,你无法调用任何方法!)但是调用ToString()一个空的Nullable(Of T)返回String.Empty?这对我来说是一个惊喜,因为我认为这种行为在各种类型中都是一致的.

Nullable<Guid> value = null;
Stock stock = null;
string result = value.ToString(); //Returns empty string
string result1 = stock.ToString(); //Causes a NullReferenceException
Run Code Online (Sandbox Code Playgroud)

c# null nullable value-type reference-type

21
推荐指数
2
解决办法
2055
查看次数

C#Nullable类型的编码实践

我从未在C#代码中使用过可空类型.现在我决定通过在我的代码中引入可空类型来改变我的编码实践.

在应用程序编程的情况下,在从普通数据类型转换为可空数据类型时,应该对编码实践进行哪些主要更改?

应该注意哪些方面?

我应该经常注意哪些要点?

c# nullable

20
推荐指数
4
解决办法
9902
查看次数