Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms 转换类型';DBNULL';输入';字符串';无效_Winforms_Visual Studio 2012 - Fatal编程技术网

Winforms 转换类型';DBNULL';输入';字符串';无效

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

我已经创建了一个代码,从一个数据库中获取数据并将其放入第二个数据库中,当前的问题是,当数据库中的字段为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")

希望有人能帮上忙

您可以使用三元语句,在将项转换为字符串之前检查该项是否为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),因为您没有提供数据库信息: