2012-08-08 49 views
0

我想写一个mdb到CVS转换器与VB.NET。 我想要得到的列标题使用oledbdata读者的名字,这里是我的代码到目前为止vb.net对象变量或与块变量未设置,OleDbDataReader

Public Cheadernames As Array 
    Public firstRead As Boolean = False 
    Public columnCount 

    Dim connectionstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strfilename 
    Dim queryString = "SELECT * FROM products" 
    Dim connection As New OleDbConnection(connectionstring) 
    Dim command As New OleDbCommand(queryString, connection) 
    connection.Open() 
    Dim reader As OleDbDataReader = command.ExecuteReader() 
    While reader.Read 
     If firstRead Then 
      columnCount = reader.FieldCount() 
      firstRead = False 
      For i = 0 To columnCount - 1 
       Cheadernames(i) = reader.GetName(i) ' i am getting an error with this line 
       Console.WriteLine(Cheadernames(i)) 
      Next 
     End If 

,所以我试图把所有的列标题名在一个数组,但注释行给了我这个错误“对象变量或带块变量未设置“

+1

您的问题是,Cheadernames返回数组不会初始化。 您需要首先使用返回数组(应该初始化),然后返回该数组。看看http://www.dotnetperls.com/array-vbnet和返回数组部分。 – 2012-08-08 04:24:44

回答

3

您的Cheadernames变量是一个空数组,没有元素,也没有类型。这只是错误的:你几乎从不声明变量或方法参数“As Array”。相反,你想这样的事情:

Private HeaderHames() As String 
Private firstRead As Boolean = True 
Private columnCount As Integer 

Dim connectionstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strfilename 
Dim queryString = "SELECT * FROM products" 
Using connection As New OleDbConnection(connectionstring), _ 
     command As New OleDbCommand(queryString, connection) 

    connection.Open() 
    Using reader As OleDbDataReader = command.ExecuteReader() 
     While reader.Read 
      If firstRead Then 
       columnCount = reader.FieldCount() 
       HeaderNames = New String(columnCount-1) 
       firstRead = False 
       For i = 0 To columnCount - 1 
        HeaderNames(i) = reader.GetName(i) 
        Console.WriteLine(HeaderNames(i)) 
       Next 
      End If 
      '... 
     End While 
    End Using 
End Using 
相关问题