避免在每列上检查DataRow.IsDBNull?

3 vb.net dbnull datarow dataset

我的代码是2倍长于这将是,如果我可以自动设置IsDBNull""或简单地滚动它没有一个错误.

这是我的代码:

Dim conn As New SqlConnection
conn.ConnectionString = Module1.DBConn2
Dim sqlCommand = New SqlCommand("SELECT * FROM table", conn)
conn.Open()
Dim sqlDataset As DataSet = New DataSet()
Dim sqlDataAdapter As SqlDataAdapter = New SqlDataAdapter(sqlCommand)
sqlDataAdapter.Fill(sqlDataset)
conn.Close()

For Each rs As DataRow In sqlDataset.Tables(0).Rows
    If Not IsDBNull(rs("column")) Then
        Response.Write(rs("column"))
    Else
        Response.Write("")
    End If

    Response.Write("some stuff to write")

    If Not IsDBNull(rs("column2")) Then
        Response.Write(rs("column2"))
    Else
        Response.Write("")
    End If
Next
Run Code Online (Sandbox Code Playgroud)

在那种情况下,我只想输入Response.Write(rs("column"))而不是If语句,column IsDBNull然后输出一个空字符串.

我怎样才能做到这一点?

提前谢谢了!

Tim*_*ter 5

你可以简单地使用String.Join并传递row.ItemArray:

For Each row As DataRow In sqlDataset.Tables(0).Rows
    Response.Write(String.Join("", row.ItemArray))
Next
Run Code Online (Sandbox Code Playgroud)

这有效,因为DBNull.ToString返回一个空字符串.

如果要处理每一列,可以使用DataRowExtensions.Field支持nullables 的强类型方法,并返回null/ Nothing作为字符串.然后你可以使用null-coalescing operator(??在C#中,If在VB中).

Dim rowInfo = String.Format("{0}{1}{2}",
                            If(row.Field(Of String)("Column1"), ""),
                            If(row.Field(Of String)("Column2"), ""),
                            If(row.Field(Of String)("Column3"), ""))
Run Code Online (Sandbox Code Playgroud)

但是请注意,String.Format将其转换null/ Nothing""无论如何隐含的,所以If是多余的,只是供参考.

MSDN:

如果index指定的对象是空引用(在Visual Basic中为Nothing),则格式项将替换为空字符串("").