سؤال

أحاول قراءة البيانات من ملف 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 أشياء لك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top