C# uygulamasında, bir CSV dosyasını okumak için Microsoft Jet OLEDB veri sağlayıcısı kullanıyorum. Bağlantı dizesi aşağıdaki gibi görünür: DataReader ve OLEDB Jet veri sağlayıcısı kullanarak bir CSV dosyası okurken, sütun veri türlerini nasıl kontrol edebilirim?
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Data;Extended Properties="text;HDR=Yes;FMT=Delimited
O bağlantı dizesini kullanarak bir ADO.NET OleDbConnection açın ve CSV komutuyla dosya tüm satırları seçin:
select * from Data.csv
Bir OleDbDataReader açtığınızda ve döndürdüğü sütunların veri türlerini inceler, yığındaki bir şeyin, dosyadaki ilk veri satırı temelinde veri türlerinde tahmin etmeye çalıştığını buldum. Örneğin, CSV dosyası içerdiğini düşünelim: Ev sütunu için OleDbDataReader.GetDataTypeName yöntemin çağrılması
House,Street,Town
123,Fake Street,Springfield
12a,Evergreen Terrace,Springfield
sütun veri türü "DBTYPE_I4" verildiğini ortaya çıkaracaktır, bu yüzden okunan tüm değerler olarak yorumlanır tamsayılar. Benim sorunum House bir dize olmalı - İkinci satırda House değerini okumaya çalıştığımda, OleDbDataReader boş döndürür.
Jet veritabanı sağlayıcısı veya OleDbDataReader'dan bir sütunu sayı yerine dizeler olarak yorumlamasını nasıl söyleyebilirim? yürürlükte bunu bir yapı verir -
Bu, OleDbProvider ürününü tamamen devre dışı bırakacaktır; bu muhtemelen iyi bir şeydir. Kayıt ["FieldName"] 'den döndürülen değerler tüm dizelerdir - kodumun her sütuntan hangi veri türünün beklendiğini önceden bilmesi ve dizeleri" System.Convert "üzerinden çalıştırması gerekir. –