الطريقة الصحيحة لمشاركة متغيرات قاعدة البيانات (ASP.NET)
-
30-09-2019 - |
سؤال
لقد كنت أشارك متغيرات قاعدة البيانات باستخدام الكود التالي:
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
الكائنات عند الطلب. سيضمن تجميع الاتصال أن يتم إجراء اتصال واحد فقط لقاعدة البيانات الفعلية في وقت واحد.
بالطريقة التي حصلت عليها هنا ، ليست آمنة لخيط الخيط (إذا قدم شخصان طلبًا في نفس الوقت ، على سبيل المثال ، ستحصل الأمور حقًا معطوب).