C#同时使用两个sqldatareader吗?

5

你好,有没有办法同时使用两个sqldatareader?

我正在编写程序,并因为同时使用了2个读取器而出现错误。

代码示例:

SqlCommand LoadSilk = new SqlCommand("SELECT silk_own FROM SK_Silk WHERE JID = (SELECT JID FROM TB_User WHERE StrUserID = '"+ comboBox1.Text +"')", Connection);
SqlDataReader SilkReader = LoadSilk.ExecuteReader();
SqlCommand LoadCharacter = new SqlCommand("SELECT * FROM SRO_VT_SHARD.DBO._Char WHERE CharID IN (SELECT CharID FROM SRO_VT_SHARD.DBO._User WHERE UserJID = "+ JID +")", Connection);
SqlDataReader CharacterReader = LoadCharacter.ExecuteReader();

try
{
    SilkReader.Read();
    textBox5.Text = SilkReader[0].ToString();
    Silk = SilkReader[0].ToString();
    dataGridView1.Enabled = true;
    button2.Enabled = true;
    while (CharacterReader.Read()) {
        dataGridView1.Rows.Add(CharacterReader["CharID"].ToString(), CharacterReader["CharName16"].ToString(), CharacterReader["CurLevel"].ToString());
    }
    log(comboBox1.Text + " account data loaded");
}
catch (Exception ex) {
    log(ex.Message);
    MessageBox.Show("Error");
} finally {
    SilkReader.Close();
    CharacterReader.Close();
}

我遇到了错误,并显示如下:

这个命令已经与一个未关闭的DataReader相关联,必须先关闭它。

5个回答

14

错误信息具有误导性。你必须在连接字符串中设置MultipleActiveResultSets=True才能够发送两个不同命令,并使用两个不同的读取器。


5

当你使用多活动结果集(Multiple Active Result Sets,或MARS)时,这是可能的。请查看这篇有用的文章,详细介绍了所有可能出现的问题。


3

1

1. 只需在连接字符串中添加MultipleActiveResultSets=True:

private string _ConnectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=yourdbpath\Database.mdf;Integrated Security=True;MultipleActiveResultSets=True;Connect Timeout=30";

0

public partial class Form1 : Form 块中声明这些 DataReader。例如:

namespace GoodFood_1_
{
    public partial class Autentificare_client : Form
   {
        SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\edi_b\Documents\visual studio 2013\Projects\GoodFood(1)\GoodFood(1)\GOOD_FOOD.mdf;
        Integrated Security=True;MultipleActiveResultSets=True");
        SqlConnection con2 = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=c:\users\edi_b\documents\visual studio 2013\Projects\GoodFood(1)\GoodFood(1)\GOOD_FOOD.mdf;
        Integrated Security=True;MultipleActiveResultSets=True");

        SqlDataReader dr;
        SqlDataReader cc;

        public Autentificare_client()
        {
            InitializeComponent();
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接