الطريقة الصحيحة لمشاركة متغيرات قاعدة البيانات (ASP.NET)

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

سؤال

لقد كنت أشارك متغيرات قاعدة البيانات باستخدام الكود التالي:

Namespace DataAccessVariables
    Public Class Vars
        Public Shared s As String
        Public Shared con As String = WebConfigurationManager.ConnectionStrings("Dev").ToString()
        Public Shared c As New SqlConnection(con)
        Public Shared x As New SqlCommand(s, c)
    End Class
End Namespace

ثم أستورد هذا إلى مشروعي مثل هذا:

Imports DataAccessVariables.Vars

عندما أتحقق من الموقع باستخدام FXCOP ، أحصل على هذه الرسالة:

Error, Certainty 90, for StaticHolderTypesShouldNotHaveConstructors
{
    Target       : DBVars  (IntrospectionTargetType)
    Resolution   : "Remove the public constructors from 'Vars'."
    Help         : http://msdn2.microsoft.com/library/ms182169(VS.90).aspx  (String)
    Category     : Microsoft.Design  (String)
    CheckId      : CA1053  (String)
    RuleFile     : Design Rules  (String)
    Info         : "Instances of types that define only static members 
                   do not need to be created. Many compilers will automatically 
                   add a public default constructor if no constructor 
                   is specified. To prevent this, adding an empty private 
                   constructor may be required."
    Created      : 2010/04/20 01:25:16 PM  (DateTime)
    LastSeen     : 2010/04/21 07:17:46 AM  (DateTime)
    Status       : Active  (MessageStatus)
    Fix Category : Breaking  (FixCategories)
}

إذا قمت بإزالة "المشاركة العامة" من الإعلانات ، فلا يتم التقاط المتغيرات في صفحاتي. هل يمكن لأي شخص أن يريني الطريقة الصحيحة لمشاركتها؟

شكرا جزيلا ، فيل.

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

المحلول

هذا الخطأ لا يخبرك بإزالة المتغيرات المشتركة العامة. بدلاً من ذلك ، يتيح لك معرفة أنه من الممكن إنشاء مثيل جديد لك Vars الفصل ، على الرغم من أنه يشمل فقط Shared أفراد. لحل المشكلة ، حدد مُنشئًا خاصًا:

Private Sub New()
End Sub

هذا سيمنع أي رمز إنشاء مثيل من Vars الفصل خارج الفصل نفسه.

نصائح أخرى

هل هذا هو فقط رمز في صفك؟

أيضًا ، يجب ألا تنشئ عالميًا (ثابتًا) SqlConnection. ببساطة إنشاء SqlConnection و SqlCommand الكائنات عند الطلب. سيضمن تجميع الاتصال أن يتم إجراء اتصال واحد فقط لقاعدة البيانات الفعلية في وقت واحد.

بالطريقة التي حصلت عليها هنا ، ليست آمنة لخيط الخيط (إذا قدم شخصان طلبًا في نفس الوقت ، على سبيل المثال ، ستحصل الأمور حقًا معطوب).

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