Winforms 转换类型';DBNULL';输入';字符串';无效
我已经创建了一个代码,从一个数据库中获取数据并将其放入第二个数据库中,当前的问题是,当数据库中的字段为null时,它将返回一个错误 “将类型'DBNULL'转换为类型'String'无效” 我使用的代码是:Winforms 转换类型';DBNULL';输入';字符串';无效,winforms,visual-studio-2012,Winforms,Visual Studio 2012,我已经创建了一个代码,从一个数据库中获取数据并将其放入第二个数据库中,当前的问题是,当数据库中的字段为null时,它将返回一个错误 “将类型'DBNULL'转换为类型'String'无效” 我使用的代码是: Dim ITN As String = ResultSet.Item( "ItemNumber") Dim QN As String = ResultSet.Item( "QuoteNumber") Dim ITD As String = ResultSet.Item( "ItemDescr
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")
希望有人能帮上忙 您可以使用三元语句,在将项转换为字符串之前检查该项是否为null 同样在c#中,您可以执行以下操作: 字符串值=结果集项目(“价格”)作为字符串 as将自动将无效引用类型转换为null。对于VB.NET:
我厌倦了检查DBNULL,所以我为此编写了一个函数。取决于您使用的数据库类型,这实际上取决于效率,但是,为了提高效率,您可能希望使用StringBuilder类,而不是字符串连接 如果您使用参数化查询,请参阅本文,了解有关使用带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
vs.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),因为您没有提供数据库信息: