【发布时间】:2019-06-27 18:16:07
【问题描述】:
我在 SQL Express 中有一个表,其中包含一些在 TreeView 类型场景中使用的数据。
有父子关系,但都在一张表中。
我的目的是设置一个缩进级别值,我的想法是选择数据,使用阅读器从第一条记录开始。它没有父级,因此级别保持为0,如果记录有父级,则必须检查父级的缩进值,然后加1。
我的问题是所有级别一开始都是 0,当它运行我的代码时,它在第二条记录上将缩进级别设置为 1,但是当它记录三时,它显示三的父级级别是仍然是 0。即使我更新了它,当我查看表时它设置为 1。看来我的选择已经将数据存储在阅读器中。
表结构:
using (SqlConnection connection = new SqlConnection("Data Source=" + servername + "; MultipleActiveResultSets = true;Initial Catalog=" + database + "; Integrated Security=SSPI"))
{
using (SqlCommand cmd = new SqlCommand("SELECT * FROM relationship", connection))
{
connection.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
// Check is the reader has any rows at all before starting to read.
if (reader.HasRows)
{
// Read advances to the next row.
while (reader.Read())
{
int sid = reader.GetInt32(1);
//GET THE CURRENT LEVEL OF THE RECORD
int slevel = reader.GetInt32(4); /* THIS SECTION IS NOT SELECTING THE CURRENT DATA THAT WAS UPDATED IN MY UPDATE BELOW*/
//ADD TO CURRENT LEVEL
int newslevel = slevel + 1;
MessageBox.Show("MY ID IS " + sid + " MY LEVEL IS " + slevel);
using (SqlCommand upd = new SqlCommand("UPDATE relationship SET level=@newlevel WHERE parent_id_ref=@sid", connection))
{
upd.Parameters.AddWithValue("@sid", sid);
upd.Parameters.AddWithValue("@newlevel", newslevel);
int rows = upd.ExecuteNonQuery();
}
}
}
}
connection.Close();
}
}
【问题讨论】:
标签: c# sql-server sqldatareader