StringBuilder重复添加数据表的第一行
本文关键字:一行 添加 数据表 StringBuilder | 更新日期: 2023-09-27 18:18:27
我试图从一个包含24个月客户付款历史的数据表建立一个html表。但是,只返回第一行数据(最近的付款),并且重复24次。Select语句在查询生成器中运行时返回24个不同的行。foreach循环是否重写了自身?我不认为我超载的stringbuilder只有24行。我尝试添加AppendLine();但这不会改变任何事情。
//get account history
String strConnString7 = WebConfigurationManager.ConnectionStrings["billing_webConnectionString"].ConnectionString;
SqlConnection con7 = new SqlConnection(strConnString7);
SqlCommand cmd7 = new SqlCommand("SELECT * FROM dbo.WEB_HISTORY WHERE acct_nbr ='" + AcctNbr + "'ORDER BY billing_date DESC", con7);
cmd7.Parameters.Add("conn_nbr", SqlDbType.VarChar).Value = Session["AcctNum"];
cmd7.Connection = con7;
SqlDataAdapter da7 = new SqlDataAdapter(cmd7);
DataTable dtHistory = new DataTable();
da7.Fill(dtHistory);
if (dtHistory != null && dtHistory.Rows.Count > 0)
{
string Billing_Date = String.Format("{0:d}", dtHistory.Rows[0]["billing_date"]);
string W_Cons = dtHistory.Rows[0]["w_cons"].ToString();
string W_Curr_Chrg = String.Format("{0:0.00}", dtHistory.Rows[0]["w_curr_chrg"]);
string S_Curr_Chrg = String.Format("{0:0.00}", dtHistory.Rows[0]["s_curr_chrg"]);
string Adjs = String.Format("{0:0.00}", dtHistory.Rows[0]["adjs"]);
string Pay = String.Format("{0:0.00}", dtHistory.Rows[0]["pay"]);
string Return_pay = String.Format("{0:0.00}", dtHistory.Rows[0]["return_pay"]);
System.Text.StringBuilder sb = new System.Text.StringBuilder();
int counter = 0;
foreach (DataRow row in dtHistory.Rows)
{
sb.Append("<tr><td>" + Billing_Date + "</td><td>" + W_Cons + "</td><td>" + W_Curr_Chrg + "</td><td>" + S_Curr_Chrg + "</td><td>" + Adjs + "</td><td>" + Pay + "</td><td>" + Return_pay + "</td></tr>");
}
History.Text = sb.ToString();
//Counter.Text = counter.ToString();
con7.Close();
}
遍历每一行,但只设置Billing_Date
、W_Cons
、W_Curr_Chrg
、S_Curr_Chrg
、Adjs
、Pay
和Return_pay
一次:
string Billing_Date = String.Format("{0:d}", dtHistory.Rows[0]["billing_date"]);
string W_Cons = dtHistory.Rows[0]["w_cons"].ToString();
string W_Curr_Chrg = String.Format("{0:0.00}", dtHistory.Rows[0]["w_curr_chrg"]);
string S_Curr_Chrg = String.Format("{0:0.00}", dtHistory.Rows[0]["s_curr_chrg"]);
string Adjs = String.Format("{0:0.00}", dtHistory.Rows[0]["adjs"]);
string Pay = String.Format("{0:0.00}", dtHistory.Rows[0]["pay"]);
string Return_pay = String.Format("{0:0.00}", dtHistory.Rows[0]["return_pay"]);
当你循环遍历行时,你每次都添加它们,但你实际上并没有更新它们——所以它们的值永远不会从你最初设置的值改变。
foreach (DataRow row in dtHistory.Rows)
{
sb.Append("<tr><td>" + Billing_Date + "</td><td>" + W_Cons + "</td><td>" + W_Curr_Chrg + "</td><td>" + S_Curr_Chrg + "</td><td>" + Adjs + "</td><td>" + Pay + "</td><td>" + Return_pay + "</td></tr>");
}
你需要在循环中更新它们的值
您在foreach
循环中使用固定数据。
例如,Billing_Date
设置在循环的顶部,因此将始终包含相同的值。
循环需要访问row
变量以从每行获取数据。
你正在遍历每一行:
foreach (DataRow row in dtHistory.Rows)
但是在循环中,你永远不会使用row
对象
sb.Append("<tr><td>" + Billing_Date + "</td><td>" + W_Cons + "</td><td>" + W_Curr_Chrg + "</td><td>" + S_Curr_Chrg + "</td><td>" + Adjs + "</td><td>" + Pay + "</td><td>" + Return_pay + "</td></tr>");
而不是Billing_Date
我假设你想要row["billing_date"]
等
作为旁注,您在sb.Append
中进行了大量的字符串连接。你应该单独附加每一项,避免过多的连接。
这是因为下面所有变量都包含对Rows[0]
值的引用。您需要更改它以检索各自数据行的值并构建StringBuilder。
string Billing_Date = String.Format("{0:d}", dtHistory.Rows[0]["billing_date"]);
string W_Cons = dtHistory.Rows[0]["w_cons"].ToString();
string W_Curr_Chrg = String.Format("{0:0.00}", dtHistory.Rows[0]["w_curr_chrg"]);
string S_Curr_Chrg = String.Format("{0:0.00}", dtHistory.Rows[0]["s_curr_chrg"]);
string Adjs = String.Format("{0:0.00}", dtHistory.Rows[0]["adjs"]);
string Pay = String.Format("{0:0.00}", dtHistory.Rows[0]["pay"]);
string Return_pay = String.Format("{0:0.00}", dtHistory.Rows[0]["return_pay"]);
那么你的if
语句将变成
if (dtHistory != null && dtHistory.Rows.Count > 0)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (DataRow row in dtHistory.Rows)
{
string Billing_Date = String.Format("{0:d}", row["billing_date"]);
string W_Cons = dtHistory.row["w_cons"].ToString();
string W_Curr_Chrg = String.Format("{0:0.00}", row["w_curr_chrg"]);
string S_Curr_Chrg = String.Format("{0:0.00}", row["s_curr_chrg"]);
string Adjs = String.Format("{0:0.00}", row["adjs"]);
string Pay = String.Format("{0:0.00}", row["pay"]);
string Return_pay = String.Format("{0:0.00}", row["return_pay"]);
sb.Append("<tr><td>" + Billing_Date + "</td><td>" + W_Cons + "</td><td>" + W_Curr_Chrg + "</td><td>" + S_Curr_Chrg + "</td><td>" + Adjs + "</td><td>" + Pay + "</td><td>" + Return_pay + "</td></tr>");
}
History.Text = sb.ToString();
con7.Close();
}