データベース変数を共有する適切な方法(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
オブジェクトオンデマンド。接続プーリングにより、一度に1つの物理データベース接続のみが確実に行われます。
ここでそれを手に入れた方法は、スレッドセーフではありません(たとえば、2人が同時にリクエストをした場合、たとえば、物事は得られるでしょう 本当 ねじ込み)。
所属していません StackOverflow