【问题标题】:Conversion type 'DBNULL' to type 'String' is not valid将类型“DBNULL”转换为类型“字符串”无效
【发布时间】:2014-03-15 10:28:07
【问题描述】:

我创建了一个代码来从一个数据库中获取数据并将其放入第二个数据库,我目前遇到的问题是当数据库中的字段为空时它返回一个错误 "将类型 '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")

希望有人可以帮助解决这个问题!

【问题讨论】:

    标签: winforms visual-studio-2012


    【解决方案1】:

    您可以使用三元语句并在将其转换为字符串之前检查 Item 是否为 null。

    在 c# 中你也可以这样做:

    String value = ResultSet.Item("Price") as String;

    as 会自动将无效的引用类型转换为 null。对于 VB.NET:

    VB.Net equivalent of C# "As"

    【讨论】:

      【解决方案2】:

      我厌倦了检查 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 注入。就像我提到的,根据您使用的数据库,您可能必须使用 SqlParameterSqlDbTypeOleDbParameterOleDbType 但 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),因为您没有提供 db 信息:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-10
        • 2012-11-19
        • 2011-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多