我的代码比自动设置时长 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
在那种情况下,我只想输入
Response.Write(rs("column"))
而不是 If
声明,如果 column
IsDBNull
然后输出一个空字符串。我怎样才能做到这一点?
提前谢谢了!
最佳答案
您可以简单地使用 String.Join
并通过 row.ItemArray
:
For Each row As DataRow In sqlDataset.Tables(0).Rows
Response.Write(String.Join("", row.ItemArray))
Next
自
DBNull.ToString
起有效返回一个空字符串。如果你想处理每一列,你可以使用强类型
DataRowExtensions.Field
支持可空值并返回 null
的方法/Nothing
为字符串。然后你可以使用 null-coalescing operator
(在 C# 中为 ??
,在 VB 中为 If
)。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"), ""))
但是,请注意
String.Format
将转换 null
/Nothing
至 ""
无论如何,所以If
是多余的,仅供引用。MSDN :
If the object specified by index is a null reference (Nothing in Visual Basic), then the format item is replaced by the empty string ("").
关于vb.net - 避免在每列上检查 DataRow.IsDBNull 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14401264/