CSV dosyası .NET Datatable dosyasına nasıl okunur

CSV dosyasını bir System.Data.DataTable dosyasına nasıl yükleyebilirim ve CSV dosyasına göre datatable oluşturabilirim?

Normal ADO.net işlevselliği buna izin veriyor mu?

Ben OleDb sağlayıcısını kullanıyorum. Ancak, sayısal değerlere sahip satırları okuyorsanız ancak bunların metin olarak ele alınmasını istiyorsanız sorun yaşıyor. Ancak, bir schema.ini dosyası oluşturarak bu sorunu aşabilirsiniz. İşte benim kullandığım yöntem:

// using System.Data;
// using System.Data.OleDb;
// using System.Globalization;
// using System.IO;

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.Jet.OLEDB.4.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;
    }
}
Yorumlar (6)
Çözüm

İşte DataTable oluşturmak için verilerin yapısını kullanarak CSV verilerini bir datatable'a kopyalayacak mükemmel bir sınıf:

Düz dosyalar için taşınabilir ve verimli bir genel ayrıştırıcı

Yapılandırması ve kullanımı kolaydır. Bir göz atmanızı tavsiye ederim.

Yorumlar (3)

İşte ADO.Net'in ODBC metin sürücüsünü kullanan bir çözüm:

Dim csvFileFolder As String = "C:\YourFileFolder"
Dim csvFileName As String = "YourFile.csv"

'Note that the folder is specified in the connection string,
'not the file. That's specified in the SELECT query, later.
Dim connString As String = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" _
    & csvFileFolder & ";Extended Properties=""Text;HDR=No;FMT=Delimited"""
Dim conn As New Odbc.OdbcConnection(connString)

'Open a data adapter, specifying the file name to load
Dim da As New Odbc.OdbcDataAdapter("SELECT * FROM [" & csvFileName & "]", conn)
'Then fill a data table, which can be bound to a grid
Dim dt As New DataTableda.Fill(dt)

grdCSVData.DataSource = dt

Doldurulduktan sonra, ADO.Net veri nesnelerinin tüm güçlerinden yararlanmak için ColumnName gibi veri nesnesi özelliklerine değer verebilirsiniz.

VS2008'de aynı etkiyi elde etmek için Linq kullanabilirsiniz.

NOT: Bu bu SO sorusunun bir kopyası olabilir.

Yorumlar (0)