读书人

为什么这样写vs调试都死机了。解决方

发布时间: 2012-03-01 10:25:47 作者: rapoo

为什么这样写,vs调试都死机了。。。
private void Form1_Load(object sender, EventArgs e)
{
chart1.Series["Series1"].ChartType = SeriesChartType.Line;

string str="Data Source=WIN-NVQAG2H5CRO\\SQLEXPRESS;Integrated Security=True";
SqlConnection con = new SqlConnection(str);
con.Open();

SqlCommand cmd = new SqlCommand();

cmd.CommandText = "select * from Table_Test";
cmd.Connection = con;
cmd.CommandType = CommandType.Text;

SqlDataReader sdr = cmd.ExecuteReader();
while(sdr.Read())
{
chart1.Series["Series1"].Points.AddXY(sdr[0],sdr[1]);
}
con.Dispose();
}
这个是正常的。
private void Form1_Load(object sender, EventArgs e)
{
chart1.Series["Series1"].ChartType = SeriesChartType.Line;

string str="Data Source=WIN-NVQAG2H5CRO\\SQLEXPRESS;Integrated Security=True";
SqlConnection con = new SqlConnection(str);
con.Open();

SqlCommand cmd = new SqlCommand();

cmd.CommandText = "select * from Table_Test";
cmd.Connection = con;
cmd.CommandType = CommandType.Text;

SqlDataReader sdr = cmd.ExecuteReader();
bool tf =sdr.Read();
while(tf)
{
chart1.Series["Series1"].Points.AddXY(sdr[0],sdr[1]);
}
con.Dispose();
}
请高人指点!

[解决办法]
死循环了。

while(sdr.Read())
{
chart1.Series["Series1"].Points.AddXY(sdr[0],sdr[1]);
}

每次读一行,读到末尾sdr.Read返回false.循环退出。


bool tf =sdr.Read(); //读一行,如果表里有数据。tf为True

while(tf) //一直是True
{
chart1.Series["Series1"].Points.AddXY(sdr[0],sdr[1]); //一直读第一行
}

[解决办法]
bool tf =sdr.Read();
while(tf)
{
chart1.Series["Series1"].Points.AddXY(sdr[0],sdr[1]);
}
con.Dispose();
}

如果 sdr有数据,那么 tf= true;

那么 while(true)
{
dosomething();
}

会一直循环下去。。。。。。这样做是不对的。。



而你第一个例子,

while(sdr.Read())
{
chart1.Series["Series1"].Points.AddXY(sdr[0],sdr[1]);
}
con.Dispose();
}

如果sdr有第一条数据,就读取第一条,并返回true,然后 sdr.read()第二次,读取第二条,如果第二条没有数据,while跳出
[解决办法]
SqlDataReader.Read 没有理解它的含义

读书人网 >.NET

热点推荐