質問

次のコードを使用してデータベース変数を共有しています。

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. 。単に作成します SqlConnectionSqlCommand オブジェクトオンデマンド。接続プーリングにより、一度に1つの物理データベース接続のみが確実に行われます。

ここでそれを手に入れた方法は、スレッドセーフではありません(たとえば、2人が同時にリクエストをした場合、たとえば、物事は得られるでしょう 本当 ねじ込み)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top