标签: dbnull

用DBNULL检查ASP.Net值

我有以下代码

foreach (DataRowView dr in Data)
        {
            if (dr == System.DBNull.Value)
            {
                nedID = 1;
            }
        }
Run Code Online (Sandbox Code Playgroud)

但我得到以下错误操作符==不能应用于类型System.Data.DataRowView和操作数System.DBNull

请有人建议我如何检查值是否为空或DBNULL

asp.net dbnull

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

.NET DBNull vs所有变量类型都没有?

我对.NET中的空值和变量有点困惑.(VB首选)

有没有办法检查任何给定变量的"nullness",无论它是对象还是值类型?或者我的空检查是否必须始终预测它是在检查值类型(例如System.Integer)还是对象?

我想我正在寻找的是一个检查所有可能类型的无效的函数.也就是说,任何类型的变量

a)自从宣布以来从未被赋予价值

b)从数据对象(来自数据库)中分配了一个空值

c)被设置为等于另一个为null的变量值

d)设置为从未设置或过期的ASP.NET会话/应用程序变量.

在.NET中处理空方案时是否有一般的最佳实践?

更新:当我谈到一个值为"null"的值类型时,我真正的意思是一个值类型,它从未设置过,或者在某个点设置为等于或从空对象转换.

.net vb.net variables null dbnull

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

当我使用XmlSerialiser对其进行反序列化时,为什么我的DbNull不是单例?

我一直认为DbNull.value是一个单身人士.因此你可以做这样的事情:

VB.NET:

If someObject Is DbNull.Value Then
    ...
End if
Run Code Online (Sandbox Code Playgroud)

C#:

If (someObject == DbNull.Value)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是最近,我使用XmlSerialiser序列化了一个DbNull实例,突然间它不再是单例了.类型比较操作(如C#(obj是DBNull))工作正常.

代码如下:

[Serializable, System.Xml.Serialization.XmlInclude(typeof(DBNull))]
public class SerialiseMe
{
    public SerialiseMe() { }

    public SerialiseMe(object value)
    {
        this.ICanBeDbNull = value;
    }
    public Object ICanBeDbNull { get; set; }
}

public void Foo()
{
    var serialiseDbNull = new SerialiseMe(DBNull.Value);
    var serialiser = new System.Xml.Serialization.XmlSerializer(typeof(SerialiseMe));
    var ms = new System.IO.MemoryStream();
    serialiser.Serialize(ms, serialiseDbNull);
    ms.Seek(0, System.IO.SeekOrigin.Begin);
    var deSerialisedDbNull = (SerialiseMe)serialiser.Deserialize(ms);

    // Is false, WTF!
    var equalsDbNullDeserialised = …
Run Code Online (Sandbox Code Playgroud)

.net c# singleton dbnull xml-serialization

6
推荐指数
1
解决办法
2332
查看次数

Linq和DBNull - 获取错误

从行中选择时出现错误.AsEnumerable().我使用以下代码...

var rows = ds.Tables[0].AsEnumerable();
                trafficData = rows.Select(row => new tdDataDC
                {
                    CalculationCount = row.Field<Int64>("biCalculationCountSeqID")
                    , Zone = row.Field<Int16>("siFkZoneId")
                    , Miles = row.Field<decimal>("dcMiles")
                    , Plaza = row.Field<Int16>("siFkPlazaId")
                    , VehicleCount = row.Field<int>("iVehicleCount")


                });
Run Code Online (Sandbox Code Playgroud)

大多数情况下它运行良好,但是当数据库中有NULLS时,我收到此错误"无法将DBNull.Value强制转换为'System.Int16'.请使用可空类型.."如何更正此问题?我不希望我的datacontracts有Nullable类型,我想使用三元组或其他东西,如果值为NULL,只需使用0.这可能吗?

谢谢你的帮助,
~kk

c# linq ienumerable null dbnull

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

如何以更好的方式分配DBNull?

我需要解析a中的值DataRow并将其分配给另一个DataRow.如果输入有效,那么我需要将其解析为a double,否则DBNull为输出添加一个值.我正在使用以下代码:

public double? GetVolume(object data)
{
    string colValue = data == null ? string.Empty : data.ToString();
    double volume;

    if (!Double.TryParse(colValue.ToString(), out volume))
    {
        return null;
    }
    return volume;
}

public void Assign(DataRow theRowInput,DataRow theRowOutput)
{
    double? volume = GetVolume(theRowInput[0]);

    if(volumne.HasValue)
    theRowOutput[0] = volume.value;
    else
    theRowOutput[0] = DbNull.Value;

    return theRowOutput;
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?

.net c# parsing dbnull datarow

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

SQL视图从非空表中推断出可空列?

我有一个带有非null"quantity"(十进制)和"status"(int)列的Product表,我在这个表上创建了一个带有以下case表达式的视图:

SELECT P.ProductTypeId,
       (CASE WHEN P.StatusId IN (5, 8) THEN 0 ELSE -P.Quantity END) AS Quantity,
       ...
FROM Product P
Run Code Online (Sandbox Code Playgroud)

ProductTypeId被正确推断为非null.但是,即使基础列不可为空,也会将此视图的"数量"列推断为可为空.这对我没有任何意义.

我可以使用ISNULL/COALESCE在这种情况下提供默认值并强制不可为空,但是没有有意义的默认值,这不应该从我理解的第一位发生.有什么想法发生了什么?

sql dbnull sql-view

6
推荐指数
1
解决办法
844
查看次数

C#/Oracle10g = null 与 DBNull.Value 与 String.Empty

我正在第一次尝试从 C# 访问 Oracle。我发现 Oracle 不喜欢VarChar参数具有值null(C#)。我本来希望会有一些隐式转换,但我很欣赏这种差异。

所以我需要捕获这些空值并提供DBNull.Value,当然吗?最明显的方法是使用合并运算符??

param myParm = myObject.MyProperty ?? DBNull.Value;
Run Code Online (Sandbox Code Playgroud)

但它不接受System.DBNull... 的值,所以我必须使用:

param myParm = myObject.MyProperty ?? DBNull.Value.ToString();
Run Code Online (Sandbox Code Playgroud)

...这肯定与以下内容相同:

param myParm = myObject.MyProperty ?? String.Empty;
Run Code Online (Sandbox Code Playgroud)

..这也有效。

但我一直明白,根据 ANSI SQL 规则,空字符串 ("") != NULL 值...但它似乎在 Oracle 中。

无论如何,我的问题是,处理空字符串值的情况的最佳实用或理论方法是什么?是否有我尚未确定的巧妙替代方案?或者这只是我们刚刚接受的 Oracle 的另一个特质?

c# oracle null ado.net dbnull

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

转换NULL值

我正在尝试使用数据库表中的值填充类对象.该someObject.Property字段是可以为null的int类型.

someObject.Property = Convert.ToInt32(dbReader["SomeField"]);
Run Code Online (Sandbox Code Playgroud)

所以,如果SomeFieldnull,Convert会给出DBNull错误.我应该使用一种特定的方法吗?

c# dbnull

5
推荐指数
1
解决办法
3299
查看次数

如何确定参数值是否已传递给存储过程

我想创建一个存储过程(在SQL Server 2008 R2中),它将根据表的PK更新表中的记录.

例如,存储过程将具有四个参数:

@ID int,
@Name nvarchar(50),
@Email nvarchar(80),
@Phone nvarchar(20)
Run Code Online (Sandbox Code Playgroud)

如果调用者没有为一个(或多个)参数传递任何内容,我如何确定存储过程的调用者是否为一个(或多个)参数传递NULL值?

C#调用者示例:

来电指定NULL@Phone:

using (SqlCommand cmd = new SqlCommand())
{
  cmd.CommandType = System.Data.CommandType.StoredProcedure;
  cmd.CommandText = "EditPerson";
  cmd.Parameters.AddWithValue("@ID", id);
  cmd.Parameters.AddWithValue("@Name", 'Frank');
  cmd.Parameters.AddWithValue("@Email", 'frank@frank.com');
  cmd.Parameters.AddWithValue("@Phone", DBNull.Value);
  DatabaseManager.instance.ExecuteScalarQuery(cmd);
}
Run Code Online (Sandbox Code Playgroud)

调用者忽略@Phone参数:

using (SqlCommand cmd = new SqlCommand())
{
   cmd.CommandType = System.Data.CommandType.StoredProcedure;
   cmd.CommandText = "EditPerson";
   cmd.Parameters.AddWithValue("@ID", id);
   cmd.Parameters.AddWithValue("@Name", 'Frank');
   cmd.Parameters.AddWithValue("@Email", 'frank@frank.com');
   DatabaseManager.instance.ExecuteScalarQuery(cmd);
}
Run Code Online (Sandbox Code Playgroud)

我在这里要完成的是,如果调用者为参数显式指定NULL值,那么我将使用NULL值更新记录.但是,如果用户明确忽略传递参数,则UPDATE查询将保留已为特定记录设置的字段/列的值(即查询不会更新该特定列).

我想我可以指定默认值,可以安全地假设调用者永远不会使用 - 如下所示:

@ID int,
@Name nvarchar(50) = …
Run Code Online (Sandbox Code Playgroud)

dbnull stored-procedures sql-server-2008

5
推荐指数
2
解决办法
2381
查看次数

自动将.Net null转换为DBNull.Value?

我编写了一个实用程序来处理为手动sql查询添加数据参数的值.消费看起来像

utility.Add("SELECT * FROM MyTable WHERE MyColumn = {0}", myVariable, DBType.TheType);
Run Code Online (Sandbox Code Playgroud)

要么

utility.Add("UPDATE MyTable SET MyColumn = {0}", myVariable, DBType.TheType);
Run Code Online (Sandbox Code Playgroud)

如何处理myVariable的空值?

  1. 所有值都应完全受信任.责任完全在于消费者.消费者如何知道无论如何都会处理null?
  2. null永远不会工作,所以它应该抛出NullArgumentException.为什么要进一步?
  3. null应该自动解释为DBNull.Value,因为它是唯一可行的解​​决方案.这是一个实用程序,对吗?使它可以使用并干掉一些代码!

可选的红利问题:如果这些论点是由三位政治候选人提出的,他们的政党会是什么?(请说明这些政党的母国)

.net c# sql database dbnull

5
推荐指数
1
解决办法
1862
查看次数