2017-08-24 78 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:你可以访问该行,因此在你调用该方法之前。无论如何,使用列名而不是序号索引更好。 –

相关问题