今天终于算是把这个多重结果集弄明白了,呵呵,sql server 2005就是比2000优秀多了...
我们还是先看一段代码:
SqlConnection conn =new SqlConnection("server=.\\sqlexpress;database=wtqtest;Integrated Security=sspi;MultipleActiveResultSets=ture");
private void button1_Click(object sender, EventArgs e)
{
try
{
conn.Open();
SqlCommand cmd1 = new SqlCommand("select fname from mytable1", conn);
SqlCommand cmd2 = new SqlCommand("select lname from mytable1", conn);
SqlDataReader dr1 = cmd1.ExecuteReader();
SqlDataReader dr2 = cmd2.ExecuteReader();
while (dr1.Read())
{
this.textBox1.Text += dr1[0].ToString();
}
while (dr2.Read())
{
this.textBox2.Text += dr2[0].ToString();
}
dr1.Close();
dr2.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void button1_Click(object sender, EventArgs e)
{
try
{
conn.Open();
SqlCommand cmd1 = new SqlCommand("select fname from mytable1", conn);
SqlCommand cmd2 = new SqlCommand("select lname from mytable1", conn);
SqlDataReader dr1 = cmd1.ExecuteReader();
SqlDataReader dr2 = cmd2.ExecuteReader();
while (dr1.Read())
{
this.textBox1.Text += dr1[0].ToString();
}
while (dr2.Read())
{
this.textBox2.Text += dr2[0].ToString();
}
dr1.Close();
dr2.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
或许大家已经看到了连接字符串中有一句:MultipleActiveResultSets=ture,大家可以试着把它去掉,呵呵,代码肯定就会出问题的.
在声明 dr2 那行出现了错误:("已有打开的与此命令相关联的 DataReader,必须首先将它关闭。")
这个就是在没有设置:MultipleActiveResultSets=ture的情况下一个连接就只能查询一个活动的结果集,由于它还没有被关闭,所以就出了问题,
但如果你加上了:MultipleActiveResultSets=ture这句它就允许你在一个连接中查询多个结果集.呵呵,是不是很神奇!!
其实它更广泛的用途是有些情况我们要把一个查询放到一个临时变量中,然后再用这个临时变量去更新另一张表,更新完后这个临时变量就没用了,这种情况下
我们就可以创建两个查询,直接把第一个查询结果传给第二个查询,就不用再去创建临时变量,浪费内存了!!!