Burada benzer bir soru var In Memory OleDbConnection to Excel File ama, bu soru tamamen başka bir şekilde yaparak bunu kaçınarak yanıtlandı.Excel dosyalarını OleDbConnection Excel ACE Sürücüsünü bir dosya yerine, aranmaz bir System.IO.Stream kullanarak okuyabilir miyim?
static void Main(string[] args)
{
String filePathToExcelFile = "c:\\excelfile.xls";
Boolean hasHeaders = true;
String connectionString = String.Format(
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};" +
"Extended Properties=\"Excel 12.0;HDR={1};IMEX=2\"",
filePathToExcelFile, hasHeaders ? "Yes" : "No");
using(OleDbConnection conn = new OleDbConnection(connectionString))
using (OleDbCommand command = new OleDbCommand("SELECT * FROM [Sheet1$]",
conn))
{
conn.Open();
OleDbDataReader datareader = command.ExecuteReader();
while(datareader.Read())
{
Object[] values = new object[datareader.FieldCount];
datareader.GetValues(values);
Console.WriteLine(String.Join(",", values));
}
}
}
Ben diskte OLMAYAN seekable System.IO.Stream
değil bir kalıcı dosyayı Excel dosyasını çekin istiyorum: Burada
OleDbConnection
kullanan bazı örnek kod .
Soru iki bölüme ayrılıyor, a) OleDbConnection'ı bir System.IO.Stream öğesine "işaretleyebilir miyim"? b) Eğer öyleyse bu, aranabilir olandan ziyade sadece ileriye doğru bir akım olabilir mi?
FYI: Bu kod snippet'ini çalıştırmak isterseniz, Microsoft Access Database Engine 2010 Redistributable'u yüklemeniz gerekir. Ve eğer 64 bit'i kurarsanız, projeyi x64 ve tam tersini hedeflemeniz gerekir.
ederim olmayan aranabilir kısıtı altında bunu yapmak mümkün olurdu şüphesiz. Excel dosyaları (göstermiş olduğunuz gibi) .xls (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (=) seri biçim. Yani Bir Excel dosyasını tamamen ardışık olarak işlemek mümkün değildir. –
Aşağıdaki yanıtı kontrol edin: http://stackoverflow.com/questions/908712/in-memory-oledbconnection-to-excel-file –