3

プログラムをサーバーに接続して、c#でSQLデータベースを作成しようとしています。ログイン画面の作成に問題があります。問題は、ログイン画面を作成することです。2つの文字列を接続クラスに渡そうとしていますが、ステートメントが静的であるため、渡すことができませんか?

public class sqlconnect
{
    public String us;
    public String pas;

    public SqlConnection myConnection = new SqlConnection("user id=" + (us) + ";" +
                                           "password=" + (pas) + ";server=PANDORA;" +
                                           "Trusted_Connection=yes;" +
                                           "database=NHS; " +
                                           "connection timeout=30");
}

ERROR - A field initializer cannot reference the non-static field, method, or property 

「us」または「pas」を静的にしようとすると、メインクラスからこのクラスに情報を渡すことができません。私はC#の専門家ではないので、誰かが私が間違っていることを指摘してくれるとありがたいです。ありがとうございました。

4

2 に答える 2

8

フィールド初期化子内で変数を使用することはできません。ここでの適切なオプションはmyConnection、プロパティまたは(この場合はさらに良い)メソッドを作成することです。

public SqlConnection CreateConnection()
{
     return new SqlConnection("user id=" + us + ";" +
                                       "password=" + pas + ";server=PANDORA;" +
                                       "Trusted_Connection=yes;" +
                                       "database=NHS; " +
                                       "connection timeout=30");
}

これにより、他の変数(状態)を使用して、必要な値を作成できます。

また、文字列値をプロパティに変更し、プロパティを初期化するコンストラクターを用意し、より適切な名前を使用することをお勧めします。もう1つの方法は、ユーザー名とパスワードをメソッドのパラメーターにすることです。つまり、次のようになります。

public SqlConnection CreateConnection(string username, string password)
{
     return new SqlConnection("user id=" + username + ";" +
                                       "password=" + password + ";server=PANDORA;" +
                                       "Trusted_Connection=yes;" +
                                       "database=NHS; " +
                                       "connection timeout=30");
}

これにより、これらを状態としてクラス内に格納する必要がなくなります(他のルーチンでも使用されている場合を除く)。

于 2012-10-16T21:16:21.647 に答える
1
// property
public SqlConnection myConnection { get; set; }

// method
public SqlConnection GetSqlConnection()
{
     if (myConnection == null) 
       myConnection = new SqlConnection("user id=" + us + ";" +
                                       "password=" + pas + ";server=PANDORA;" +
                                       "Trusted_Connection=yes;" +
                                       "database=NHS; " +
                                       "connection timeout=30");

     return myConnection;
}
于 2012-10-16T21:22:48.147 に答える