相关疑难解决方法(0)

是vs typeof

这些代码中的哪一段更快?

if (obj is ClassA) {}

if (obj.GetType() == typeof(ClassA)) {}
Run Code Online (Sandbox Code Playgroud)

编辑:我知道他们不会做同样的事情.

c# rtti

145
推荐指数
4
解决办法
11万
查看次数

处理DBNull的最佳方法是什么?

我经常遇到处理DataRows退回的问题SqlDataAdapters.当我尝试使用如下代码填充对象时:

DataRow row = ds.Tables[0].Rows[0];
string value = (string)row;
Run Code Online (Sandbox Code Playgroud)

DBNull's在这种情况下处理这种情况的最佳方法是什么.

.net c# sql-server

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

应该使用IsDBNull和IsNull中的哪一个?

如果VB.NET我有DataRow,我想测试列值是否Null,我应该使用:

myDataRow.IsNull("Column1")
Run Code Online (Sandbox Code Playgroud)

要么

IsDBNull(myDataRow("Column1"))
Run Code Online (Sandbox Code Playgroud)

.net vb.net null dbnull

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

如何在vb.net中实现值类型的C#'as'关键字?

我们的大多数开发都是在vb.net中完成的(不是我的选择),一个经常使用的代码模式使用'On Error GoTo'后跟'Resume Next',以便所有数据库字段都可以使用DirectCast()读取DBNull值只是被忽略.

目前的代码是

On Error GoTo error_code
oObject.Name = DirectCast(oReader.Item("Name"), String)
oObject.Value = DirectCast(oReader.Item("Value"), Integer)
error_code:
Resume Next
Run Code Online (Sandbox Code Playgroud)

C#代码替换这个启用删除On Error代码即可

oObject.Name = oReader["Name"] as string ?? string.Empty;
oObject.Value = oReader["Value"] as int? ?? -1;
Run Code Online (Sandbox Code Playgroud)

问题是这个C#代码的vb.net eqivelent使用TryCast(),它只能用于引用类型(可空类型是值类型),而C#as关键字可以用于引用和可空类型.

总而言之,有没有人有一个vb.net代码的例子,它在每个数据库字段的单行中与C#代码做同样的事情?

-编辑-

在我们的案例中,我已经确定了我认为最好的解决方案.Helper方法不适合(由于管理),我们不能使用扩展方法,因为我们只使用.NET 2.0(尽管使用VS 2008,因此我们获得了If())

oObject.Name = If(oReader.IsDBNull(oReader.GetOrdinal("Name")), String.Empty, oReader.GetString(oReader.GetOrdinal("Name")))
oObject.Value = If(oReader.IsDBNull(oReader.GetOrdinal("Value")), 0, oReader.GetInt32(oReader.GetOrdinal("Value")))
Run Code Online (Sandbox Code Playgroud)

.net c# vb.net

12
推荐指数
2
解决办法
3381
查看次数

如何在VB中正确检查DBNull?

为什么以下代码:

  A = not IsDBNull(CurRow("BuyBook")) AndAlso CType(CurRow("BuyBook"), string) = "Yes"
Run Code Online (Sandbox Code Playgroud)

导致以下错误:

 Conversion from type 'DBNull' to type 'String' is not valid.
Run Code Online (Sandbox Code Playgroud)

当AndAlso根据这篇文章被认为是短路的时候:

http://support.microsoft.com/kb/817250

.net vb.net asp.net sql-server-2008

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

从DataReader读取数据的通用方法

我目前正在使用此方法从DataReader读取数据 -

private T GetValue<T>(object obj)
{
    if (typeof(DBNull) != obj.GetType())
    {
        return (T)obj;
    }
    return default(T);
}
Run Code Online (Sandbox Code Playgroud)

将上述方法称为 -

GetValue<int>(dataReader["columnName1"])
GetValue<string>(dataReader["columnName2"])
GetValue<float>(dataReader["columnName3"])
Run Code Online (Sandbox Code Playgroud)

但是,当columnName3具有7200000与错误一样的值时,这会失败
Invalid Cast Exception.

我正在考虑修改我的替换方法 -

return (T)obj;
Run Code Online (Sandbox Code Playgroud)

return (T)Convert.ChangeType(obj, typeof(T));
Run Code Online (Sandbox Code Playgroud)

但期待更好的方式,因为这种变化将涉及两次类型铸造.
有更好的想法吗?

谢谢!

c# sqldatareader

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

转换SqlDataReaders

更换(int)reader[0]reader.GetInt32(0)什么好处?我确信这样的投射功能是有原因的,但除了感觉更美观以至于避免演员本人之外,我不确定这些原因是什么.

.net c# sql sqldatareader

4
推荐指数
1
解决办法
2289
查看次数

标签 统计

.net ×5

c# ×5

vb.net ×3

sqldatareader ×2

asp.net ×1

dbnull ×1

null ×1

rtti ×1

sql ×1

sql-server ×1

sql-server-2008 ×1