2014-02-16 130 views
0

我已經創建了一個代碼來從一個數據庫中獲取數據並將其放入第二個數據庫中,目前我遇到的問題是當數據庫中的字段爲空它返回一個錯誤 「轉換型‘的DBNull’到類型‘串’無效」類型'字符串'的轉換類型'DBNULL'無效

我使用的代碼是:

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

您可以使用三元語句並在將其轉換爲字符串之前檢查Item是否爲null。

此外,在C#中,你可以做這樣的事情:

字符串值= ResultSet.Item( 「價格」)的字符串;

as將自動將無效的引用類型轉換爲null。對於VB.NET:

VB.Net equivalent of C# "As"

0

我累了檢查DBNull的,所以我寫了一個函數。根據您使用的數據庫的類型,這取決於實際情況,但爲了提高效率,您可能需要使用StringBuilder類而不是字符串連接。

如果使用參數化查詢看到這個link一個非常基本的介紹瞭如何使用參數化查詢與訪問,您將能夠直接插入特殊的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 & SqlDbTypeOleDbParameter & 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),因爲您沒有提供數據庫信息:

相關問題