我的代码是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
支持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"), ""))
但是,请注意String.Format
将转换null
/ Nothing
到""
隐含反正,所以If
是多余的, 仅供参考 。
MSDN :
如果由索引指定的对象为空引用(Visual Basic中没有),则格式项被替换为空字符串(“”)。
这里是一个班轮:
Response.Write(rs.IsNull("column") ? "" : rs("column"));
或使其扩展方法:
public string GetValueOrBlankString(this DataRow rs, string column)
{
return rs.IsNull(column) ? "" : rs(column).ToString();
}
然后调用它为:
Response.Write(rs.GetValueOrBlankString("column"));
数据集扩展给你做一个干净的方式,它也是强类型的。 该类型必须尽管在数据库中的列类型相匹配。 如果数据库列可以为空,然后使用可空类型如下图所示。 空值将成为返回可空类型没有。
For Each rs As DataRow In sqlDataset.Tables(0).Rows
'If string, you can use this. Null becomes nothing for the string.
Response.Write(rs.field(of String)("column"))
'if it's another type
Response.Write(rs.field(of Integer?)("column"))
Next
谷神星的回答可能是最好的因为它避免了任何形式的空测试,但值得注意的是,“IIF”功能也将工作得很好了。 它仍然会做的空测试,但它要比乔如何原来做更紧凑。 这样的事情应该做的伎俩:
For Each rs As DataRow In sqlDataset.Tables(0).Rows
Response.Write( IIF( IsDBNull(rs("column")), "", rs("column") ) )
Next
什么是整齐这个是可以替代的“”任何你想要的输出值是否实际上是空(一个不错的加分。)
下面是对那些“IIF”功能,谁也不知道它是什么的一些信息:
http://msdn.microsoft.com/en-ca/library/27ydhh0d(v=vs.71).aspx