1

ProfileHelper というクラスを作成しましたが、get/set アクセサーを正しく取得できないようです。代わりに、get と set の両方で赤い線が表示されます。これが私が使用しようとしているコードです:

public static String UserName(string columnName)
{ 
    get
    {
        using (SqlConnection cn = new SqlConnection(SiteConfig.ConnectionString))
        {
            string sSql = ("SELECT UserName , LoweredUserName FROM  aspnet_Users  WHERE UserId = @UserId");

            using (SqlCommand cm = new SqlCommand(sSql, cn))
            {
                cm.Parameters.AddWithValue("@UserId", Membership.GetUser().ProviderUserKey.ToString());
                cn.Open();
                using (SqlDataReader rd = cm.ExecuteReader())
                {
                    while (rd.Read())
                    {
                        return columnName;
                    }
                    rd.Close();
                }
                cn.Close();
            }         
        }            
        return columnName;
    }
    set
    {
        using (SqlConnection cn = new SqlConnection(SiteConfig.ConnectionString))
        {
            string sSql = ("UPDATE [aspnet_ Users] SET UserName = @UserName, LoweredUserName = @LoweredUserName WHERE UserId = @UserId");

            using (SqlCommand cm = new SqlCommand(sSql, cn))
            {
                cm.Parameters.AddWithValue("@UserId", Membership.GetUser ().ProviderUserKey.ToString());
                cn.Open();
                cm.ExecuteNonQuery();
                cn.Close();
            }    
        } 
    }
}
4

3 に答える 3

8

これはプロパティではなくメソッドです。プロパティのみが get アクセサーと set アクセサーを持っています。一つを選ぶ。

public static String UserName(string columnName) // this implies a method
     { 
      get // this implies a property
      {
于 2012-05-10T13:02:14.690 に答える
7

構文は基本的に次のとおりです。

private string userName;
public string UserName // no parameter here!
{
  get { return this.userName; }
  set { this.userName = value; } // value is a keyword
}

または、auto-property がバッキング フィールドを実行します。

public string UserName { get; set; } // equivalent
public string MyExternallyReadOnly { get; private set; } // setter is private

プロパティで SQL 接続をいじってはいけません。プロパティへのアクセスは、高速で信頼できるものでなければなりません。これをメソッドに置き換えることを検討して、これが実際には外部の依存関係 (失敗する可能性が高い) を伴うより長期にわたるアクションであることを明確にします。

public string GetUserName() { }
public void UpdateUserName() {}
于 2012-05-10T13:04:13.193 に答える
2

メソッドのペアを作成する必要がGetUserName(string columnName)ありSetUserName(string columnName, string value)ます。これは、DB 接続を行っているなどの理由でおそらく時間がかかる場合に推奨される方法であり、パラメーターを簡単に設定できます。

public static String UserName(string columnName)メソッドのシグネチャです。 public static String UserNameプロパティになります。プロパティには get/set アクセサーがありますが、メソッドにはありません。これを変更する必要があります。プロパティは引数を許可しません。ただし、インデックス付きプロパティは静的にすることはできません (たとえば、 like のように使用され、 like のようmyObj[someColumnName]に宣言されpublic string this[string columnName]ます)。のようなプロパティにアクセスすることを期待している場合は、プロパティをvar something = ProfileHelper.UserName;使用してください。

于 2012-05-10T13:07:00.180 に答える