الحصول على "SQLExpress ملف قاعدة البيانات تلقائي إنشاء خطأ" على موقع يستخدم AspNetSqlMembershipProvider ، ولكن سلسلة الاتصال هو SQL Server 2005

StackOverflow https://stackoverflow.com/questions/1402430

سؤال

لدي ASP.NET v2.0 موقع (ليس تطبيق ويب) أين الدليل الجذر العامة ، ولكن "المشرف" فرعي يتطلب مصادقة.كل شيء عن الإعداد هو عام جدا - أنا استخدم سلسلة الاتصال المحددة في "موقع ويب الجذر".التكوين القياسي AspNetSqlMembershipProvider موفر, و أنا باستخدام ASP.NET تسجيل الدخول السيطرة.
شبكة الإنترنت.التكوين في دليل المشرف يحدد أن يجب أن يكون لدى المستخدم "المشرف" دور.

أنا باستخدام SQL Server 2008, و سلسلة اتصال جيدة ؛ كل مستوى الجذر الصفحة بيانات مدفوعة و جميعها تعمل بشكل جيد.
مزود التكوين يبدو goo.

عندما كنت تسجيل الدخول, تسجيل الدخول التحكم "OnLoggedIn"الحدث الحرائق.
السطر الأخير في هذا الحدث رمز الموجهات لي وصولا الى بلدي Admin/Default.aspx الصفحة.بلدي توقف في "OnLoggedIn" يظهر لي أن كل شيء على ما يرام حتى إعادة توجيه إلى أسفل في بلدي دليل المشرف...ثم...

ثم انتظر...وانتظر...

ثم أحصل على خطأ تقول لي إنها شهدت "SQLExpress database file auto-creation error."

لماذا في العالم هو فجأة في محاولة لخلق SQL Server Express الملف ؟ لماذا فجأة تجاهل اتصال السلسلة ؟

واحد غريب فكرة:قبل السطر الأخير من "OnLoggedIn" الحدث أضع في هذا:

bool blnTest = User.IsInRole("Admin");

أردت أن أرى إذا كان blnTest = true.
ما يحدث هو عملية يضرب هذا الخط...و ينتظر...و في النهاية يقول لي لا يمكن الوصول إلى قاعدة بيانات SQL Server Express.يبدو أن أي إشارة (إما في قانون بلدي ، أو وراء الكواليس) إلى تحديد دور المستخدم ، ويدعو الخطأ في قاعدة البيانات الخاصة بنا.

تحرير:بالبيت في بعض الأحيان فإنه ينتظر عندما كنت اختبار blnTest.مرة أخرى أنه على الفور تقارير قيمة بأنها "كاذبة".

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

المحلول

ووفقا لتعليقك، يبدو أنك قد لم تكوين صراحة مزود دور لك الموقع.

وإذا كان كل هذا في الملف web.config الخاص بك هو:

<roleManager enabled="true" />

وبعد ذلك كنت تعتمد على مقدمي الافتراضي أعلن كذلك أعلى hieracrchy التكوين (machine.config، Web.config العمومية، الخ)

في machine.config ربما كنت قد حصلت على شيء مثل:

<roleManager>
  <providers>
    <add name="AspNetSqlRoleProvider" 
      connectionStringName="LocalSqlServer" 
      applicationName="/" 
      type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
    <add name="AspNetWindowsTokenRoleProvider" 
      applicationName="/" 
      type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
  </providers>
</roleManager>

وكما ترون، تم تكوين أول مزود لاستخدام سلسلة_أحرف_الاتصال دعا LocalSqlServer - الذي هو أيضا أعلن عادة في machine.config:

<add name="LocalSqlServer" 
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" 
     providerName="System.Data.SqlClient"/>

وتم تصميم هذا لاستخدام قاعدة بيانات ملف المحلية القائمة التي سيتم إنشاؤها إذا لم يكن موجودا بالفعل.

وهكذا للحصول على أدوار العمل على موقع الويب الخاص بك، يجب أن ammend الملف web.config الجذر الخاص بك إلى شيء مثل:

<roleManager enabled="true">
  <providers>
    <clear />
    <add name="AspNetSqlRoleProvider" 
      connectionStringName="YourConnectionStringName" 
      applicationName="/" 
      type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
  </providers>
</roleManager>

وباستخدام <واضح /> العنصر سيتم إزالة جميع مقدمي المحددة سابقا لهذا النوع.

نصائح أخرى

عند تحديد AttachDBFilename الخيار في سلسلة الاتصال هي في الواقع يطلبون الخاص بك للغاية الخاصة بها-فقط-في ذات الوقت-توفير مثيل SQL Server ، ويعرف أيضا باسم 'المستخدم سبيل المثال'.هذا المثال يتم إنشاؤه عن طريق طرح 'سيد' سبيل المثال ( ؟ \SQLEXPRESS سبيل المثال) إلى توفير طفل سبيل المثال ، مما يعني نسخ ماجستير/نموذج/msdb إلى ملف التعريف الخاص بك ، بدءا جديد عملية SQL Server تحت حساب تكوين لاستخدام حديثا نسخه ماستر/نموذج/msdb ، ثم يسأل هذا "الطفل" على سبيل المثال أن نعلق المحدد 'ملف' كما قاعدة بيانات جديدة.التفاصيل موضحة في SQL Server 2005 Express Edition المستخدم الحالات.

عملية إنشاء طفل سبيل المثال هو متردده هشة عندما يكسر DB دعوة النتائج في نهاية المطاف في الوقت الخطأ عند فتح اتصال.في هذه الحالة يبدو أن عملية فواصل في بعض الحالات (عند الوصول إلى المحمية جزء من الموقع).لماذا يفطر, من الصعب جدا تخمين دون المعلومات الصحيحة.نظرة على القضايا المشتركة في ربط المادة ومعرفة ما إذا كان أي ينطبق عليك.أيضا تحقق من سجل أحداث النظام للحصول على أي رسالة لماذا الطفل الحالات لا يمكن أن تبدأ أو لا يمكن فتح ملف MDF.علما بأن خطأ شائع هو أن نسأل عن نفس ملف فعلي مع AttachDBFilename تحت اعتماد مختلفة:كل الاعتماد سوف تبدأ الخاصة 'الطفل' سبيل المثال فقط أول واحد سوف تنجح في ربط قاعدة البيانات المطلوبة.

وكان لي نفس المشكلة التي كان من المقرر أن الخدمات لخادم SQL يتم تعطيل.

والاختيار تحت services.msc لمعرفة ما إذا كانت خدمة SQLEXPRESS قيد التشغيل. إذا كان تحقق لمعرفة ما إذا كان لديك مزود صريحة تثبيتها على جهازك

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