我创建了一个代码来从一个数据库中获取数据并将其放入第二个数据库,我目前遇到的问题是当数据库中的某个字段为null时它会返回错误 “转换类型'DBNULL'键入'String'无效”
我使用的代码是:
Dim ITN As String = ResultSet.Item( "ItemNumber")
Dim QN As String = ResultSet.Item( "QuoteNumber")
Dim ITD As String = ResultSet.Item( "ItemDescription")
Dim DET As String = ResultSet.Item( "Details")
Dim PR As String = ResultSet.Item("Price")
希望有人可以帮助这个人!!
答案 0 :(得分:0)
您可以使用三元语句并在将其转换为字符串之前检查Item是否为null。
同样在c#中你可以这样做:
String value = ResultSet.Item(“Price”)as String;
as会自动将无效引用类型转换为null。对于VB.NET:
答案 1 :(得分:0)
我厌倦了检查DBNULL所以我为此编写了一个函数。根据您使用的数据库类型,它实际上取决于但是,为了提高效率,您可能希望使用StringBuilder类而不是字符串连接。
如果使用参数化查询,请参阅此link以获得使用Access参数化查询的基本介绍,您可以直接插入特殊的DBNull值:
Dim myConnection As New OleDbConnection(DBConnection)
Dim Cmd As OleDbCommand = New OleDbCommand()
Cmd.CommandText = "INSERT INTO dbTable (ItemNumber, QuoteNumber, ItemDescription, Details, Price) VALUES (@ITN, @QN, @ITD, @DET, @PR)"
Cmd.Parameters.Add(New OleDbParameter("@ITN", OleDbType.VarChar)).Value = CheckDBNull(ITN)
Cmd.Parameters.Add(New OleDbParameter("@QN", OleDbType.VarChar)).Value = CheckDBNull(QN)
Cmd.Parameters.Add(New OleDbParameter("@ITD", OleDbType.VarChar)).Value = CheckDBNull(ITD)
Cmd.Parameters.Add(New OleDbParameter("@DET", OleDbType.VarChar)).Value = CheckDBNull(DET)
Cmd.Parameters.Add(New OleDbParameter("@PR", OleDbType.VarChar)).Value = CheckDBNull(PR)
DBConnection.Open()
Cmd.ExecuteNonQuery()
这对于避免令人讨厌的SQL注入也很有用。就像我提到的,根据您使用的数据库,您可能必须使用SqlParameter
& SqlDbType
与OleDbParameter
& OleDbType
但CheckDBNull函数可能很简单,如下所示:
Private Function CheckDBNull(ByVal s As String) As Object
If Not s Is Nothing And s.Length > 0 Then
Return s
Else
Return System.DBNull.Value
End If
End Function
我希望这会有所帮助。请注意,其中一些参数仅用作示例(myConnection,Cmd,dbTable),因为您没有提供数据库信息: