C# Using 2 sqldatareader at same time?

13,776

Solution 1

The error message is misleading. You must have MultipleActiveResultSets=True set in your connection string to be able to send two seperate commands with two different readers.

Solution 2

It is possible when you use something called Multiple Active Result Sets, or MARS. Check out this helpful article that details all possible pitfalls.

Solution 3

You'll have to enable Multiple Active Recordsets (MARS) on your connection.

http://msdn.microsoft.com/en-us/library/h32h3abf%28v=vs.80%29.aspx

Solution 4

1.Just add MultipleActiveResultSets=True into your connection string:

private string _ConnectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=yourdbpath\Database.mdf;Integrated Security=True;MultipleActiveResultSets=True;Connect Timeout=30";
Share:
13,776
ThElitEyeS
Author by

ThElitEyeS

Updated on July 29, 2022

Comments

  • ThElitEyeS
    ThElitEyeS over 1 year

    Hello is there a way to use two sqldatareader at same time ?

    i was coding a program

    and i got error because i use 2 readers at same

    Sample of code

    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();
    }
    

    and its gave me that error

    There is already an open DataReader associated with this Command which must be closed first.