سلسلة الاتصال قراءة البيانات من Excel في ASP.NET
-
27-09-2019 - |
سؤال
أحاول قراءة البيانات من ملف Excel في ASP.NET. لقد أضفت سلسلة الاتصال إلى ملف WebConfig:
<add name="xls" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=HPM_DB.xls;Extended Properties=Excel 8.0"/>
لكن هذا يظهر لي خطأً عندما أقوم بتشغيل هذا الاستعلام:
string query = "select * from [io_definition $] ؛
io_definition هو اسم جدول البيانات في ملف Excel الخاص بي. أضفت أيضًا ملف Excel إلى مجلد App_Data للموقع.
الخطأ هو:
لم يتمكن محرك قاعدة بيانات Microsoft Jet من العثور على كائن "io_definition $". تأكد من وجود الكائن وأنك تتهجى اسمه واسم المسار بشكل صحيح.
الشيء هو ، عندما أكتب المسار المطلق لملف Excel في ConnectionString ، فإنه يعمل. هل هناك على أي حال يمكنني جعلها تعمل دون كتابة المسار المطلق؟
شكرًا،
جريج
المحلول
المشكلة هنا هي أنه بالنسبة لهذا النوع من اتصال "الملف" ، يحتاج مزود OLEDB ، كما وجدت بالفعل ، المسار المطلق للملف. تاريخيا, ، لقد فعلنا هذا مع Server.MapPath
, ، في هذه الحالة ، ستفعل شيئًا مثل:
<connectionstrings>
<add name="xls" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;"/>
</connectionstrings>
String connString;
OleDbConnection conn;
connString = Web.Configuration.WebConfigurationManager.ConnectionStrings["xls"].ConnectionString;
connString = connString + Server.MapPath("~/App_Data/HPM_DB.xls");
conn = new OleDbConnection(connString);
conn.Open();
...
الذي يعمل ، ولكن عليك إما أن تفعل كل ما تريد فتح اتصال والاستعلام عن البيانات ، أو تقسيمها إلى فئة مصنع اتصال.
طريقة رائعة للقيام بذلك هي:
<connectionstrings>
<add name="xls" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;
Data Source=|DataDirectory|\HPM_DB.xls;"/>
</connectionstrings>
OleDbConnection conn;
conn = new OleDbConnection(Web.Configuration.WebConfigurationManager.ConnectionStrings["xls"].ConnectionString);
conn.Open();
...
في وقت التشغيل |DataDirectory|
الرمز المميز في سلسلة الاتصال يعمل كماكرو يقوم بصمت بكل ذلك Server.MapPath
أشياء لك.