0

私はゆっくりと C# を学んでおり、コードについて少し混乱しています。ここに、データベース接続設定用のクラスの簡易バージョンがあります

public class DatabaseSettings
{
    private static string connectionString = string.Empty;

    public static string ConnectionString
    {
        get 
        {
            return connectionString;
        }
        private set
        {
            connectionString = value;
        }
    }

    public bool TestConnection()
    {
        bool _returnVal = false;
        string _connectionString = String.Format("Data Source={0};Persist Security Info=False", databaseLocation);

        using (SqlCeConnection connection = new SqlCeConnection(_connectionString))
        {
            try
            {
                connection.Open();
                connectionString = _connectionString; // sets the value of the connection string here
                _returnVal = true;
            }
            catch (SqlCeException e)
            {
                // other codes here
                _returnVal = false;
            }
            finally
            {
                connection.Close();
            }
        }
        return _returnVal;
    }

    // other methods here
}

今、私Main Classはここで何が起こっているのか混乱しています。このコードを試したとき:

string _databaseLocation = "database path";
DatabaseSettings _dbaseSetting = new DatabaseSettings(_databaseLocation, true);
_dbaseSetting.TestConnection();
string newConnectionString = _dbaseSetting.ConnectionString;
//                                        ^ i got an error here
// Member 'SQLCE_Sample.ClassList.DatabaseSettings.ConnectionString.get' 
// cannot be accessed with an instance reference; 
// qualify it with a type name instead  

以下のこれはエラーなしで機能しますが、問題は空の文字列があることです:

string _databaseLocation = "database path";
DatabaseSettings _dbaseSetting = new DatabaseSettings(_databaseLocation, true);
string newConnectionString = DatabaseSettings.ConnectionString;

私が本当に欲しいのは、アプリケーションからデータベースへの接続public methodをテストするクラスを作成する必要があるということです。そのメソッド内には、接続文字列の値を設定する構文が含まれています。次に、クラスをインスタンス化せずに接続文字列の値を取得する も必要です (そのため、キーワードを追加しました)。どうすればこれにできますか?propertystatic

4

2 に答える 2

2

クラスのインスタンスによって設定されたプロパティの値に(静的に)アクセスしたいようです。したがって、必要なのはコンパイラエラーをリッスンすることだけです。インスタンス参照ではなく静的参照としてプロパティにアクセスします。変化する:

string newConnectionString = _dbaseSetting.ConnectionString;

に:

string newConnectionString = DatabaseSettings.ConnectionString;

TestConnectionもちろん、このように静的にプロパティにアクセスしようとする前に、インスタンスを呼び出すことを確認する必要があります。それ以外の場合ConnectionStringはnullになります。

于 2012-08-03T03:37:31.427 に答える
-2

パブリック静的変数と静的プロパティの名前は同じです。どちらかの名前を変更します。

于 2012-08-03T03:34:43.923 に答える