2017-08-24 20 views
0

データベースのデータをdatagridviewに読み込む際にDBNullを文字列に変換する方法が必要です。以下は私のコードDBNullを文字列に変換する前にStringを文字列に変換する

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 

彼らはnull値を持つものである可能性が最も高いのでBankNameとAccountnoがnullのエントリを可能にフィールドがあります。

あなたがこの方法で使用することができ
+0

null値に使用する文字列は何ですか? –

+0

空の文字列( "")は細かいはずです –

+0

グリッドに 'DataTable'を単にバインドしないのはなぜですか?ヌル値は自動的に処理されます。なぜ物事を難しくするのですか? – jmcilhinney

答えて

0

:あなたが明示的に型を指定する必要があります(オプション)フォールバック値を指定しない場合

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

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(Of String)(row(3)) 
+0

ありがとうございます。 'Dim bankName = row(3).ConvertDbVal(Of String)(" ")'を置くのに最適な場所はどこですか? –

+0

@NickMackenzie:申し訳ありませんが、私はそれをテストしていませんでした。 VB.NET( 'late binding issue ')で' System.Object'の拡張メソッドを使うことはできません。だから私はそれを正常な機能にした。 –

+0

@NickMackenzie:メソッドを呼び出す前に、行にアクセスできる場所があります。とにかく序数インデックスの代わりに列名を使用する方が良いでしょう。 –

関連する問題