2017-06-05 3 views
0

Ich verwende den folgenden OleDbCommand, um von einer Dateimethode mehrere Male zu lesen. Das Problem, das ich habe, besteht darin, dass es die Datentypen meist als Strings zurückgibt, aber gelegentlich (abhängig von den gelesenen Daten) seine zurückkehrenden Int-Typen. Gibt es eine Möglichkeit, alle Spalten als String zurückzugeben, ohne dass alles konvertiert werden muss, sobald es geladen ist?Definieren von OleDbCommand Rückgabetyp

static DataTable GetDataTableFromCsv(string path, bool isFirstRowHeader) 
    { 
     string header = isFirstRowHeader ? "Yes" : "No"; 

     string pathOnly = Path.GetDirectoryName(path); 
     string fileName = Path.GetFileName(path); 

     string sql = @"SELECT * FROM [" + fileName + "]"; 

     using (OleDbConnection connection = new OleDbConnection(
        @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pathOnly + 
        ";Extended Properties=\"Text;HDR=" + header + "\"")) 
     using (OleDbCommand command = new OleDbCommand(sql, connection)) 
     using (OleDbDataAdapter adapter = new OleDbDataAdapter(command)) 
     { 
      DataTable dataTable = new DataTable(); 
      dataTable.Locale = CultureInfo.CurrentCulture; 
      adapter.Fill(dataTable); 

      return dataTable; 
     } 
    } 
+0

Haben Sie schon von '' LINQ'' gehört nicht Werte begrenzen? Dies ist die Art von Dingen, die Sie in LINQ viel einfacher machen können. – abhi

+0

@abhi Datatable aus Textdatei? Würde ein Beispiel lieben, das gegeben ist, was ich oben habe. – windowskm

+0

Sie benötigen eine Schemadatei. Siehe folgenden Beitrag: https://stackoverflow.com/questions/12259562/how-can-i-create-schema-ini-file-i-need-to-export-my-csv-file-to-datagridview. – jdweng

Antwort

0

Wenn es notwendig auszuführen dies eine OleDbCommand verwenden, dann könnten Sie eine OleDbDataReader anstelle eines DataTable verwenden und jeden Wert lesen GetObject verwenden.

Dann können Sie ToString() auf einem der Werte aufrufen.

Wenn Sie jedoch eine CSV-Datei mit nicht typisierten Daten haben, ist es möglicherweise viel einfacher, die Datei nur Zeile für Zeile zu lesen und die Werte zu teilen, indem Sie eine List<string[]> erstellen.

This answer zeigt die einfachste Möglichkeit, eine .csv zu lesen und jede Zeile aufzuteilen.

This answer zeigt, wie es zu tun, wenn die Werte Kommas in Anführungszeichen enthalten, die, wie this,are,separate,"this,is,one"