سؤال

هل يعرف أحد كيفية الكتابة إلى ملف Excel (.xls) عبر OLEDB في C#؟أنا أفعل ما يلي:

   OleDbCommand dbCmd = new OleDbCommand("CREATE TABLE [test$] (...)", connection);
   dbCmd.CommandTimeout = mTimeout;
   results = dbCmd.ExecuteNonQuery();

لكنني تلقيت رسالة OleDbException مع الرسالة:

"لا يمكن تعديل تصميم الجدول" اختبار $ ".إنه في قاعدة بيانات للقراءة فقط. "

يبدو اتصالي جيدًا ويمكنني تحديد البيانات بشكل جيد ولكن لا يمكنني إدراج البيانات في ملف Excel، هل يعرف أحد كيف يمكنني الحصول على حق الوصول للقراءة/الكتابة إلى ملف Excel عبر OLEDB؟

هل كانت مفيدة؟

المحلول

تحتاج إلى إضافة ReadOnly=False; إلى سلسلة الاتصال الخاصة بك

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=fifa_ng_db.xls;Mode=ReadWrite;ReadOnly=false;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";

نصائح أخرى

كنت أيضًا أبحث عن وأجيب ولكن حل Zorantula لم ينجح معي.لقد وجدت الحل على http://www.cnblogs.com/zwwon/archive/2009/01/09/1372262.html

لقد قمت بإزالة ReadOnly=false المعلمة و IMEX=1 الملكية الموسعة.

ال IMEX=1 تفتح الخاصية المصنف في وضع الاستيراد، لذا فإن أوامر تعديل البنية (مثل CREATE TABLE أو DROP TABLE) لا تعمل.

سلسلة اتصال العمل الخاصة بي هي:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=workbook.xls;Mode=ReadWrite;Extended Properties=\"Excel 8.0;HDR=Yes;\";"

انا ايضا املك نفس المشكلة.قم بإزالة الخاصية الموسعة فقط IMEX=1.وهذا حل مشكلتك.سيتم إنشاء الجدول الخاص بك في ملف Excel الخاص بك...

بضعة أسئلة:

  • هل لدى المستخدم الذي ينفذ تطبيقك (أنت؟) إذن بالكتابة في الملف؟
  • هل الملف للقراءة فقط؟
  • ما هي سلسلة الاتصال الخاصة بك؟

إذا كنت تستخدم ASP، فستحتاج إلى إضافة مستخدم IUSER_* كما في هذا المثال.

  • كيف يمكنني التحقق من أذونات الكتابة إلى ملف Excel لتطبيقي (أنا أستخدم Excel 2007)؟
  • الملف ليس للقراءة فقط، أو محمي (على حد علمي).
  • سلسلة الاتصال الخاصة بي هي:

"Provider = microsoft.jet.oledb.4.0 ؛ Data Source = FIFA_NG_DB.XLS ؛ mode = readWrite ؛ خصائص ممتدة = " excel 8.0 ؛ hdr = yes ؛ imex = 1 ""

بالإضافة إلى إجابة مايكل هارين.من المحتمل أن يكون الحساب الذي ستحتاج إلى منحه أذونات التعديل لملف XLS هو NETWORK SERVICE إذا كان هذا الرمز يعمل في تطبيق ASP.NET (تم تحديده في تجمع تطبيقات IIS).لمعرفة الحساب الذي يعمل عليه الكود الخاص بك بالضبط، يمكنك القيام بما يلي:

Response.Write(Environment.UserDomainName + "\\" + Environment.UserName);

كنت أعمل ضمن ASP.NET، وواجهت رسائل الخطأ "لا يمكن تعديل التصميم..." و"لا يمكن تحديد موقع ISAM...".

لقد وجدت أنني بحاجة إلى:

أ) استخدم سلسلة الاتصال التالية:

Provider=Microsoft.Jet.OLEDB.4.0;Mode=ReadWrite;Extended Properties='Excel 8.0;HDR=Yes;';Data Source=" + {path to file};

لاحظ أنني أيضًا واجهت مشكلات IMEX=1 ومع ReadOnly=false السمات في سلسلة الاتصال.

ب) منح الجميع الأذونات الكاملة للمجلد الذي تتم كتابة الملف فيه.عادةً، يتم تشغيل ASP.NET ضمن حساب NETWORK SERVICE، والذي لديه أذونات بالفعل.ومع ذلك، فإن تعليمات OleDb البرمجية غير مُدارة، لذا يجب تشغيلها ضمن سياق أمان آخر.(أنا حاليًا كسول جدًا لدرجة أنني لا أستطيع معرفة أي حساب، لذلك استخدمت الجميع للتو.)

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