c使用sqldatareader方法填充文本框

本文关键字:文本 填充 方法 使用 sqldatareader | 更新日期: 2023-09-27 18:19:42

我创建了下面的方法,对其进行了测试,并返回了正确的数据。我感到困惑的是,用这种方法的结果填充表单上的各个文本框的正确方法是什么?

与其使用对象数据源,然后将网格视图绑定到对象数据源上,这是可行的,但我需要更多的自由来自定义表单

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();
       }

c使用sqldatareader方法填充文本框

类似的东西

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;
        }
    }
}

获取MemberDetails;

var memberDetails = GetMemberDetail(1);

填充文本框;

TextBox.Text = memberDetails.Property;

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;