2012-01-06 5 views
1

私は以下のメソッドを作成しました。これは正しいデータを返します。私が混乱しているところでは、フォーム上の個々のテキストボックスにこのメソッドの結果を入力する適切な方法は何ですか?c#sqldatareaderメソッドを使用してテキストボックスを作成する

objectdatasourceを使用して、オブジェクトビューをバインドするのではなく、オブジェクトデータソースにバインドするのではなく、フォームをカスタマイズする自由が必要です。

public MemberDetails GetMemberDetail(int membershipgen) 
    { 
     SqlConnection con = new SqlConnection(connectionString); 
     SqlCommand cmd = new SqlCommand("usp_getmemberdetail", con); 
     cmd.CommandType = CommandType.StoredProcedure; 

     cmd.Parameters.Add(new SqlParameter("@MEMBERSHIPGEN", SqlDbType.Int, 5)); 
     cmd.Parameters["@MEMBERSHIPGEN"].Value = membershipgen; 

     try 
     { 
      con.Open(); 
      SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow); 

      reader.Read(); 
      MemberDetails mem = new MemberDetails((int)reader["MEMBERSHIPGEN"], (string)reader["MEMBERSHIPID"], (string)reader["LASTNAME"], 
        (string)reader["FIRSTNAME"], (string)reader["SUFFIX"], (string)reader["MEMBERTYPESCODE"]); 
      reader.Close(); 
      return mem; 
     } 
     catch (SqlException err) 
     { 
      throw new ApplicationException("Data error."); 
     } 
     finally 
     { 
      con.Close(); 
     } 

答えて

2

の線に沿って何か:

var memberDetails = GetMemberDetail(12345); 
textBox1.Text = memberDetails.Prop1; 
textBox2.Text = memberDetails.Prop2; 
... 

また、私は、このメソッドをリファクタリングして、私は適切に管理されていないハンドルをリークを避けるためにusing文の中でそれらをラップすることにより、使い捨てのリソースを配置することを確認するだろう:

public MemberDetails GetMemberDetail(int membershipgen) 
{ 
    using (SqlConnection con = new SqlConnection(connectionString)) 
    using (SqlCommand cmd = con.CreateCommand()) 
    { 
     con.Open(); 
     cmd.CommandText = "usp_getmemberdetail"; 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.AddWithValue("@MEMBERSHIPGEN", membershipgen); 
     using (SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow)) 
     { 
      if (reader.Read()) 
      { 
       return new MemberDetails(
        reader.GetInt32(reader.GetOrdinal("MEMBERSHIPGEN")), 
        reader.GetString(reader.GetOrdinal("MEMBERSHIPID")), 
        reader.GetString(reader.GetOrdinal("LASTNAME")), 
        reader.GetString(reader.GetOrdinal("FIRSTNAME")), 
        reader.GetString(reader.GetOrdinal("SUFFIX")), 
        reader.GetString(reader.GetOrdinal("MEMBERTYPESCODE")) 
       ); 
      } 
      return null; 
     } 
    } 
} 
+0

GetMemberDetailは、現在のコンテキストに存在しないことを示します。それはCLMembersという名前の.DLL内にあります。なぜなら、それが存在しないことを示す理由です。だから私はvar memberDetails = CLMembers.GetMemberDetailを試みましたが、getmemberdetailの部分はまだ表示されません。 – Tim

+0

@JawaidAkhtar、 'GetMemberDetail'は非静的メソッドです。つまり、それを呼び出すには、それを含むクラスのインスタンスが必要です。したがって、このメソッドが 'CLMembers'と呼ばれるクラスで定義されていると言っているならば、これを行うことができます:' var memberDetails = new CLMembers()。GetMemberDetail(12345); '。別の可能性は静的にすることです。このようにすると、インスタンスなしで呼び出すことができます: 'var memberDetails = CLMembers.GetMemberDetail(12345);' –

+1

+1のデータアクセスでのクリーンアップ –

1

メンバーを取得する;

var memberDetails = GetMemberDetail(1); 

テキストボックスに入力します。

TextBox.Text = memberDetails.Property; 
+0

GetMemberDetailは、それが存在しないことを示しています現在のコンテキストそれはCLMembersという名前の.DLL内にあります。なぜなら、それが存在しないことを示す理由です。だから私はvar memberDetails = CLMembers.GetMemberDetailを試しましたが、getmemberdetailの部分はまだ表示されません – Tim

+0

@JawaidAkhtar - そのDLLへの参照を追加する必要があります。この回答(とDarin's)はあなたが尋ねた質問に答えます。 –

0

以下に提供された正解以外のJawaidも、SqlConnection con = nullを設定します。そして

SqlCommand cmd = null; outside the try and inside the try put the following 
con = new SqlConnection(connectionString); 

このようcmd.Parameters.Addを行うときにエラーが発生した場合 - あなたは罠その例外 もリーダーオブジェクトを処分することができます

if (reader != null) 
{ 
    ((IDisposable)reader).Dispose(); 
    // somthing like that .. do the same for con and cmd objects or wrap them in a using() {} 
} 

cmd = new SqlCommand("usp_getmemberdetail", con); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.Add(new SqlParameter("@MEMBERSHIPGEN", SqlDbType.Int, 5)); 
cmd.Parameters["@MEMBERSHIPGEN"].Value = membershipgen; 
+0

あなたのアドバイスをいただきありがとうございます。私はC#の本を読んでおり、そこには私のやり方が示されていませんでした。 – Tim

+0

あなたの歓迎私はあなたに、少なくとも理由を理解せずに簡単な答えを望む他の多くの人と比べて、これを試みるのに十分な知識を持っているための小道具を提供しています。私たちはアドバイスとアドバイスに関して私たちがしていることを投稿します。あなたは特にあなたがコーディングベンチャーのさらなる知識の幸運を得るために本を読んでいるなら、偉大なプログラマーになるでしょう。 – MethodMan

関連する問題