【问题标题】:How to transfer sqldatareader to textboxes?如何将 sqldatareader 传输到文本框?
【发布时间】:2026-01-12 11:15:01
【问题描述】:

我只能从 gridview 读取。我想在用户登录时从文本框中传递读取的文件..

这是我的数据访问层

public static SqlDataReader GetInformation(string Username)
{
    string sql = "Select Idno, Lname, Mname, Username, Password, ConPass, SchoolYear, TermGraduated from Graduates where Username = @username";
    Open();
    SqlCommand com = new SqlCommand(sql, con);
    com.Parameters.AddWithValue("@username", Username);
    com.CommandType = CommandType.Text;
    SqlDataReader sdr = com.ExecuteReader();
    Close();
    return sdr;    
}

这是我的业务逻辑层

public IDataReader GetInformation()
{
    return DAT.GetInformation(this.username);
}

然后是我在form_load中的表现层

b.Username = Session["Username"].ToString();

如何从文本框中传输数据?我唯一能做的就是使用gridview 传输它。但是我怎样才能从“TextBox1,TextBox2,TextBox3,TextBox4,TextBox5 ...”等文本框中传输数据,等等

【问题讨论】:

  • "如何从文本框中传输数据?"什么文本框?
  • 更新了我的问题。它应该是文本框。我如何根据该语句填充文本框。
  • 文本框在哪里?或者你只是想填充一个gridview?模板字段中有文本框吗
  • @JmSantos 即使有更新我也无法理解:什么“文本框”?而这句话中的“来自”这个词听起来很奇怪。你能澄清一下吗?
  • @JmSantos:这种编码方式,数据读取器在哪里关闭?

标签: c# asp.net sql-server


【解决方案1】:

如果我理解你的问题

创建一个类来表示数据,比如说研究生

public class Graduate
{
     public long Id {get;set;}
     public string LastName {get;set;}
     //rest of the fields
}

public static Graduate GetInformation(string Username)
{

//haven't put all the code here, you have the idea I guess
//also wrap this around try-catch block


    string sql = "Select Idno, Lname, Mname, Username, Password, ConPass, SchoolYear,    TermGraduated from Graduates where Username = @username";
    Open();
    SqlCommand com = new SqlCommand(sql, con);
    com.Parameters.AddWithValue("@username", Username);
    com.CommandType = CommandType.Text;

using(var sdr = com.ExecuteReader())
{
   if(sdr.HasRows)
   {
       while(sdr.Read())
       {
          var objGard = new Graduate()
                     {
                        ID = sdr["Idno"] != DBNull.Value
                                ? long.Parse(sdr["Idno"].ToString())
                                : 0,
                        LastName = reader["Lname"] != DBNull.Value
                                    ? reader["Lname"].ToString()
                                    : ""
                        //rest of the fields
                     };
               return objGard;             
       }
   }
}
return null;

}

public Graduate GetInformation()
{
    return DAT.GetInformation(this.username);
}

var grad = GetInformation();
if(grad ==null) return;

txtId.Text = grad.Id;
txtLasName.Text = grad.LastName;

【讨论】:

  • 我应该把这些放在我的表现层吗?
  • 不应该!理想情况下,您应该创建一个代表数据的类(可能是 Graduates),并根据数据创建一个类对象并将其返回到表示层
  • 我使用的是 3 层。如何返回它以让它填充文本框?
  • @humpty dumpty - 创建一个类来表示数据有什么意义 - 填充一个“毕业生”对象,然后将该对象用作数据源?在我看来,这确实是为了创建一个类/对象。为什么不直接使用 SqlDataReader 作为数据源?
  • @MartinSmellworse :我最初是这么想的,但是 OP 的要求不是填充网格视图,而是填充一些文本框(阅读 OP 的评论)!!
最近更新 更多