gpt4 book ai didi

vb.net - SQL Data Reader - 如何优雅地处理空列值

转载 作者:行者123 更新时间:2023-12-01 09:00:01 24 4
gpt4 key购买 nike

我正在使用 SQLDataReader 从可能为空的数据库中检索值。我已经研究出如何处理空字符串值,但无法使用相同的技巧来处理整数或 bool 值:

Using cmd As DbCommand = store.GetStoredProcCommand("RetrievePOCO")
store.AddInParameter(cmd, "ID", DbType.Int32, ID)
Using reader As IDataReader = store.ExecuteReader(cmd)
If reader.Read() = True Then
Dim newPOCO As New POCO()
With newPOCO
'If the source column is null TryCast will return nothing without throwing an error
.StatusXML = TryCast(reader.GetString(reader.GetOrdinal("StatusXML")), String)
'How can a null integer or boolean be set elegantly?
.AppType = TryCast(reader.GetInt32(reader.GetOrdinal("AppType")), System.Nullable(Of Integer))
.Archived = TryCast(reader.GetBoolean(reader.GetOrdinal("Archived")), Boolean)

那么如何优雅地设置空整数或 bool 值呢?我在 C# 中看到过建议,但它们没有正确转换为 VB,给出了“TryCast 操作数必须是引用类型,但整数?是值类型的编译器错误。

最佳答案

我在这种情况下使用以下功能:

Public Shared Function NoNull(ByVal checkValue As Object, ByVal returnIfNull As Object) As Object
If checkValue Is DBNull.Value Then
Return returnIfNull
Else
Return checkValue
End If
End Function

你的代码看起来像这样:
With newPOCO
.StatusXML = NoNull(reader("StatusXML"), "")
.AppType = NoNull(reader("AppType"), -1)
.Archived = NoNull(reader("Archived"), False)
End With

请注意,此函数要求您传递应在值为 DbNUll 时使用的值作为第二个参数。

关于vb.net - SQL Data Reader - 如何优雅地处理空列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19133529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com