2017-08-24 40 views
0

我需要將數據從數據庫填充到datagridview時將DBNull轉換爲字符串的方式。以下是我的代碼在將數據填充到Datagridview之前將DBNull轉換爲字符串

Private Sub FetchData() 

    sql = "SELECT ContributionType,Status,PayMethod,BankName,AccountNo,Amount,FullName,District,Refno,ContributorGrp" 
    sql &= " FROM tblincome WHERE [email protected]" 

    command = New OleDbCommand(sql, connection) 
    command.Parameters.Add(New OleDbParameter("@id", OleDbType.VarChar)).Value = lbltxnid.Text 

    adapter = New OleDbDataAdapter(command) 
    dt = New DataTable 
    adapter.Fill(dt) 



    For Each row In dt.Rows 
     PopulateGrid(row(0), row(1), row(2), row(3), row(4), row(5), row(6), row(7), row(8), row(9)) 
    Next 

    dt.Rows.Clear() 
    dt.Dispose() 
End Sub 

Private Sub PopulateGrid(ContributionType As String, Status As String, PayMethod As String, BankName As String _ 
         , AccountNo As String, Amount As Double, FullName As String, District As String _ 
         , Refno As String, ContributorGrp As String) 

    Dim row As String() = New String() {ContributionType, Status, PayMethod, BankName, AccountNo, Amount.ToString("N") _ 
             , FullName, District, Refno, ContributorGrp} 
    dgvcontributions.Rows.Add(row) 
End Sub 

字段BankName和Accountno允許空條目,因此它們很可能是空值的條目。

+0

你想用什麼字符串作爲空值? –

+0

空字符串(「」)應該沒問題 –

+0

爲什麼不簡單地將'DataTable'綁定到網格?那麼空值將自動處理。爲什麼讓事情變得更難? – jmcilhinney

回答

0

您可以使用此方法:

Public Shared Function ConvertDbVal(Of T)(obj As Object, Optional nullFallbackVal As T = Nothing) As T 
    If obj Is Nothing OrElse obj.Equals(DBNull.Value) Then 
     Return nullFallbackVal 
    Else 
     Return CType(obj, T) 
    End If 
End Function 

用法:

Dim bankName As String = ConvertDbVal(row(3), "") 
Dim accNumber = ConvertDbVal(row(4), "") 

如果不指定(可選)回退值,你必須明確指定類型:

Dim bankName As String = ConvertDbVal(Of String)(row(3)) 
+0

謝謝。在哪裏將最好的地方放在'Dim bankName = row(3).ConvertDbVal(Of String)(「」)' –

+0

@NickMackenzie:對不起,我沒有測試過它。你不能在VB.NET中使用'System.Object'的擴展方法(遲綁定問題)。所以我已經把它變成了一個正常的功能。 –

+0

@NickMackenzie:你可以訪問該行,因此在你調用該方法之前。無論如何,使用列名而不是序號索引更好。 –