猿问

如何获取每行中的每个数据 C# & SQL

假设我有一个包含 3 列的表,如下所示:


ID | NAME | Subject

---+------+----------

 1 | Mark | English

 1 | Mark | Math

 2 | Matt | Math

 2 | Matt | English

 1 | Mark | History

如何获得“标记”的每个主题,如英语、数学、历史(排序依据),这些主题将与主题列中每一行中的 ID 匹配?因为我只得到第一个主题是“英语”或第一行。


string sql = "select * from tbl_Student where ID like '"+ID.Text+"'";


cm = new SqlCommand(sql, cn);

dr = cm.ExecuteReader();


while (dr.Read())

{

    Subject1.Text = dr["Subject"].ToString();

    Subject2.Text = dr["Subject"].ToString();

    Subject3.Text = dr["Subject"].ToString();

}


dr.Close();


守着星空守着你
浏览 160回答 3
3回答

PIPIONE

您Subject.Text在每个循环中替换 的值。这意味着它只包含最后一个值。你应该连接字符串Subject.Text += dr["Subject"].ToString();

qq_遁去的一_1

使用StringBuilder:StringBuilder sb = new StringBuilder();while (dr.Read()){    sb.Append(dr["Subject"].ToString());    sb.Append(",");}result = sb.ToString().TrimEnd(',');更新使用switch/casethen 来确定您的 id 并将其值分配给正确的TextBox:while (dr.Read()){    string subject = dr["Subject"].ToString();    switch (dr["ID"].ToString())     {        case "1":            Subject1.Text += subject + " ";//$"{subject} "; //or use string builder as I've showed above             break;        case "2":            Subject2.Text += subject + " ";//$"{subject} ";            break;        case "3":            Subject3.Text += subject + " ";//$"{subject} ";            break;        default:            break;    }}另外,请使用参数化查询。

江户川乱折腾

我肯定会将 like 运算符更改为 equal(=) 运算符。而且循环中总是有一个值,连接字符串。
随时随地看视频慕课网APP
我要回答