Trong ứng dụng C# của tôi, tôi đang sử dụng nhà cung cấp dữ liệu Microsoft Jet OLEDB để đọc tệp CSV. Chuỗi kết nối trông như thế này:Khi đọc tệp CSV bằng cách sử dụng DataReader và nhà cung cấp dữ liệu OLEDB Jet, làm cách nào tôi có thể kiểm soát các loại dữ liệu cột?
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Data;Extended Properties="text;HDR=Yes;FMT=Delimited
tôi mở một OleDbConnection ADO.NET sử dụng rằng chuỗi kết nối và chọn tất cả các hàng từ nộp với lệnh CSV:
select * from Data.csv
Khi tôi mở một OleDbDataReader và kiểm tra các kiểu dữ liệu của các cột nó trả về, tôi thấy rằng một cái gì đó trong ngăn xếp đã cố gắng đoán tại các kiểu dữ liệu dựa trên hàng đầu tiên của dữ liệu trong tệp. Ví dụ, giả sử các tập tin CSV chứa:
House,Street,Town
123,Fake Street,Springfield
12a,Evergreen Terrace,Springfield
Gọi phương thức OleDbDataReader.GetDataTypeName cho cột nhà sẽ tiết lộ rằng cột đã được trao kiểu dữ liệu "DBTYPE_I4", vì vậy tất cả các giá trị đọc từ nó được hiểu là số nguyên. Vấn đề của tôi là House phải là một chuỗi - khi tôi cố gắng đọc giá trị House từ hàng thứ hai, OleDbDataReader trả về null.
Làm cách nào để tôi có thể yêu cầu nhà cung cấp cơ sở dữ liệu máy bay phản lực hoặc OleDbDataReader diễn giải cột dưới dạng chuỗi thay vì số?
Điều này sẽ vượt qua OleDbProvider hoàn toàn, mà có lẽ là một điều tốt. Các giá trị được trả về từ 'record [" FieldName "]' là tất cả các chuỗi - mã của tôi sẽ cần phải biết trước kiểu dữ liệu nào được mong đợi từ mỗi cột và chạy các chuỗi thông qua 'System.Convert'. –