【问题标题】:Getting second value of the column c# sql获取列 c# sql 的第二个值
【发布时间】:2018-08-23 07:16:10
【问题描述】:

我正在开发成绩提交模块。如何获取表格中第二行第二行放入label1,第三行放入label2,以此类推?

例子:

studentID | Subjects
 12345    | Mathematics 
 12345    | Science
 12345    | History

我只想获取“科学”和“历史”列主题的第二行并将其放入标签中并将其保存到新表中。因为我总是得到该列的第一行。

这是我的代码

string sql = "Select * from tbl_Subject where studentID like '" + studID.Text + "'";
cm = new SqlCommand(sql, cn);
dr = cm.ExecuteReader();
while (dr.Read())
{
    Subject.Text = dr["Subjects"].ToString();
}
dr.Close();

提前谢谢你!

【问题讨论】:

  • 您可以通过多种方式实现它,在 SQL 中,您可以使用ROW_NUMBER()/RANK() 作为索引/sno 创建一个带有附加列的临时结果集(使用名称作为您的选择) 列,然后将此查询用作子查询并从查询中获取结果为select * from (my query goes here) where <indexColumn>=indexWhichIwantToRead;,或者您可以通过DataAdapter 的填充方法在DataTable 中加载查询中的所有数据。
  • 您还应该看看参数化您的 sql 查询。 en.wikipedia.org/wiki/SQL_injection
  • SQL 表代表 无序 集合。表中没有第二行之类的东西,除非列指定了顺序。您的表似乎没有这样的排序列。

标签: c# sql winforms


【解决方案1】:

ROW_NUMBER() 可用于跳过整行:

string sql = "select * from (Select  ROW_NUMBER() OVER(ORDER BY Subjects) AS RoNum ,* from tbl_Subject) std where std.studentID like @Search  and std.RoNum > 1 ";
cm = new SqlCommand(sql, cn);
 cm .Parameters.AddWithValue("@Search", "%" + studID.Text + "%"); 
dr = cm.ExecuteReader();
while (dr.Read())
{
    Subject.Text = dr["Subjects"].ToString();
}
dr.Close();

您可以使用 std.RoNum > 1 跳过尽可能多的行,行的顺序为 OVER(ORDER BY Subjects)

【讨论】:

  • 显示参数化和缓解注入漏洞所需的额外一行,并接受投票:)
猜你喜欢
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
  • 2014-04-01
  • 2022-01-17
相关资源
最近更新 更多