W mojej aplikacji C# używam dostawcy danych OLEDB firmy Microsoft Jet do odczytywania pliku CSV. Ciąg połączenia wygląda następująco:Czy podczas odczytywania pliku CSV za pomocą obiektu DataReader i dostawcy danych OLEDB Jet można kontrolować typy danych kolumn?
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Data;Extended Properties="text;HDR=Yes;FMT=Delimited
I otworzyć OleDbConnection ADO.NET przy użyciu tego ciągu połączenia i zaznacz wszystkie wiersze z pliku CSV z poleceniem:
select * from Data.csv
Kiedy otworzyć OleDbDataReader i zbadaj typy danych zwracanych kolumn, stwierdzam, że coś w stosie próbowało odgadnąć typy danych na podstawie pierwszego wiersza danych w pliku. Na przykład, załóżmy, że plik CSV zawiera:
House,Street,Town
123,Fake Street,Springfield
12a,Evergreen Terrace,Springfield
Wywołanie metody OleDbDataReader.GetDataTypeName dla kolumny dom będzie ujawniają, że kolumna została podana typ danych „DBTYPE_I4”, więc wszystkie wartości odczytane z nim są interpretowane jako liczby całkowite. Mój problem polega na tym, że House powinien być ciągiem - kiedy spróbuję odczytać wartość House z drugiego rzędu, OleDbDataReader zwróci wartość null.
Jak mogę powiedzieć dostawcy bazy danych Jet lub OleDbDataReader, aby interpretować kolumnę jako ciągi zamiast liczb?
To całkowicie pomijałoby OleDbProvider, co jest prawdopodobnie dobrą rzeczą. Wartości zwracane przez 'record [" FieldName "]' są ciągami - mój kod musiałby wcześniej wiedzieć, jakiego typu danych oczekuje się od każdej kolumny, i uruchamiać łańcuchy za pomocą 'System.Convert'. –