проблема с возвратом данных в инструкции try - PullRequest
1 голос
/ 18 марта 2012

У меня есть следующий фрагмент кода, который я использую, чтобы попытаться скопировать CSV-файл и превратить его в таблицу данных.Моя проблема в том, что отладчик никогда не доходит до оператора return.Все правильно добавляется к данным, поэтому я знаю, что эта часть работает.Любая идея о том, что я могу сделать, чтобы решить эту проблему дальше.Кроме того, если вам известен более простой способ превратить импорт файла CSV в таблицу данных, мне будет очень интересно узнать об этом.

Спасибо!

    Public Function loadCSVTableII() As DataTable

    Dim dt As New DataTable("TableII")
    Dim line As String = String.Empty
    Dim counter As Integer = 0
    Dim reader As New StreamReader(pathTableTwo)

    Try
        While Not IsNothing(line)
            line = reader.ReadLine()
            Dim lineSep As String() = line.Split(New Char() {","c})

            If Not counter = 0 Then
                dt.Rows.Add(lineSep)
                counter += 1
            Else
                For Each value As String In lineSep
                    dt.Columns.Add(value)
                Next
                counter += 1
            End If
        End While

        'cursor never gets to this code block...
        Dim primarykey(0) As DataColumn
        primarykey(0) = dt.Columns("Ages")
        dt.PrimaryKey = primarykey

        Return dt

    Catch ex As Exception
        Throw
    End Try

End Function

Обновление: оноошибка в этой строке в коде.

Dim lineSep As String() = line.Split(New Char() {","c}) 

Это говорит о том, что ссылка на объект не установлена ​​на экземпляр объекта.Что странно, так это то, что он отлично работает по всей таблице данных.Может ли быть так, что цикл while не заканчивается в конце файла?

Ответы [ 2 ]

1 голос
/ 18 марта 2012

Попробуйте изменить цикл While для обработки условия окончания потока.Не очень понятно, что функция IsNothing делает в вашем коде.

 While Not reader.EndOfStream
   line = reader.ReadLine
   '// Dim lineSep As String() = line.Split(New Char() {","c})

Для разделения строк в VB.Net просто сделать это просто:

Dim lineSep As String() = line.Split(",")
1 голос
/ 18 марта 2012

Для этого вы можете использовать поставщика OLEDB.

string query = "SELECT Symbol, [Name of Company], FROM [just file name with extension]"; 
            string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + [csv file path without file name] + ";" + "Extended Properties=’text;HDR=YES;’";

            //create dataadapter object 
            OleDbDataAdapter adapter = new OleDbDataAdapter(query, connStr);

            // create table 
            DataTable dtSymbolDetails = new DataTable("ScriptDetails"); 
            dtSymbolDetails.Columns.Add("Symbol"); 
            dtSymbolDetails.Columns.Add("Name of Company");

            // fill the table with data using adapter 
            adapter.Fill(dtDetails);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...