MYSQL C#已经有一个与此Connection关联的开放DataReader,必须先关闭它

时间:2013-12-11 17:27:00

标签: mysql datareader

我知道这里有很多关于它的文章,我认为我们的问题是具体的。问题是mysql经常会返回此错误:

回答这个经常是

您遇到的问题是,您仍在使用DataReader读取数据时启动第二个MySqlCommand。 MySQL连接器只允许一个并发查询。您需要将数据读入某个结构,然后关闭阅读器,然后处理数据。遗憾的是,如果您的处理涉及进一步的SQL查询,则无法处理数据。

但我们的sw open datareader,closedatareader,正在等待,直到第一次关闭,然后打开新的等等......

因此每个选择都有自己的datareader,当select结束时,datareader就会忘记。

有人知道这个问题吗?

下一个问题是选择慢,somethimes选择需要0 ms,某些选择相同(表有0-5行)需要

11.12.2013 14:53:18:Spustam loc。查询:SELECT * FROM clovek WHERE id_doch ='00080005'LIMIT 1

11.12.2013 14:53:18:Koncim loc。查询:SELECT * FROM clovek WHERE id_doch ='00080005'LIMIT 1

11.12.2013 14:53:18:Zobrazujem形成overenia 11.12.2013 14:53:18:Spustam查询:SELECT * FROM spravy WHERE id_doch ='00080005'AND precitane =''LIMIT 1

11.12.2013 14:53:18:Chyba MySQL:已经有一个与此Connection关联的开放DataReader必须先关闭..查询:SELECT * FROM spravy WHERE id_doch ='00080005'AND precitane =''LIMIT 1

11.12.2013 14:53:18:Zatvaram MySQL。查询:SELECT * FROM spravy WHERE id_doch ='00080005'AND precitane =''LIMIT 1

11.12.2013 14:53:19:Spustam查询:UPDATE vyr_operacie SET koniec ='20131211145307'WHERE id_doch ='00080005'AND koniec =''订购zaciatok LIMIT 1

11.12.2013 14:53:19:Koncim查询:UPDATE vyr_operacie SET koniec ='20131211145307'WHERE id_doch ='00080005'AND koniec =''ORDER BY zaciatok LIMIT 1. Trvanie:0 ms。

11.12.2013 14:53:19:Spustam查询:SELECT * FROM history WHERE datum ='20131211145311'AND_doch ='00080005'AND pr ='0'AND typ ='0'AND fy ='5'AND vlozil ='CZ'AND手册='0'限制1

11.12.2013 14:53:20:Koncim查询:SELECT * FROM history WHERE datum ='20131211145311'AND_doch ='00080005'AND pr ='0'AND typ ='0'AND fy ='5'AND vlozil ='CZ'AND manual ='0'LIMIT 1. Trvanie:0 ms。

11.12.2013 14:53:20:Spustam查询:现在选择()FROM许可

11.12.2013 14:53:20:Chyba MySQL:已经有一个与此Connection关联的开放DataReader必须先关闭..查询:SELECT NOW()FROM licencia

11.12.2013 14:53:20:Zatvaram MySQL。查询:现在选择()FROM licencia

长选择的第二个问题

11.12.2013 14:54:13:Zobrazujem形成overenia 11.12.2013 14:54:13:Spustam查询:SELECT * FROM spravy WHERE id_doch ='00080005'AND precitane =''LIMIT 1

11.12.2013 14:54:13:Koncim查询:SELECT * FROM history WHERE datum ='20131211145410'AND_doch ='00080005'AND pr ='0'AND typ ='0'AND fy ='5'AND vlozil ='CZ'AND manual ='0'LIMIT 1. Trvanie:0 ms。

11.12.2013 14:54:13:Chyba MySQL:已经有一个与此Connection关联的开放DataReader必须先关闭..查询:SELECT * FROM spravy WHERE id_doch ='00080005'AND precitane =''LIMIT 1

11.12.2013 14:54:13:Zatvaram MySQL。查询:SELECT * FROM spravy WHERE id_doch ='00080005'AND precitane =''LIMIT 1

11.12.2013 14:54:13:Spustam查询:SELECT * FROM spravy WHERE id_doch ='00080005'AND precitane =''LIMIT 1

11.12.2013 14:54:13:Uploadnute zaznamy:1 11.12.2013 14:54:27:Koncim查询:SELECT * FROM spravy WHERE id_doch ='00080005'AND precitane =''LIMIT 1. Trvanie:14000 ms。

11.12.2013 14:54:27:Spustam查询:现在选择()FROM licencia 11.12.2013 14:54:27:Koncim查询:现在选择()FROM licencia。特鲁瓦:0毫秒。

    public static DataTable spustiQuery(string query)
    {
        if (nastavenia.LOG) CustomExHa.AddLog("Spustam query: " + query);
        DateTime zaciatok = DateTime.Now;
        while (bezi_query)
        {
            Thread.Sleep(50);
            pocet_query++;
            if (pocet_query > 500)
            {
                bezi_query = false;
                pocet_query = 0;
            }
        }
        bezi_query = true;
        DateTime start = DateTime.Now;
        DataTable tmp = new DataTable();
        DataTable tmpempty = new DataTable();
        tmpempty.Columns.Add("test", typeof(int));
        string tmpstr = "";
        DataSet ds = new DataSet();
        MySqlDataAdapter adapter = new MySqlDataAdapter();
        //MySqlDataReader reader = new MySqlDataReader();


        if (MYSuperConn == null)
        {
            MYSuperConn = new MySqlConnection(connStr + ";Connection Timeout=30; default command timeout=6000");
        }
        if (MYSuperConn.State != ConnectionState.Open)
        {
            try
            {
                MYSuperConn.Open();
                StavDB = true;
            }
            catch (Exception ex)
            {
                CustomExHa.AddLog("Chyba MySQL: " + ex.Message + ". Query: " + query);
                StavDB = false;
                bezi_query = false;
            }
        }
        else
        {
            StavDB = true;
        }

        //MySqlConnection mc = MYSuperConn.Clone();

        adapter.SelectCommand = new MySqlCommand(query, MYSuperConn);

        //reader = new MySqlCommand(query, MYSuperConn).ExecuteReader();

        try
        {
            //reader.fil
            adapter.Fill(ds);
            StavDB = true;
        }
        catch (Exception ep)
        {
            try
            {
                //MYSuperConn.Close();

                bezi_query = false;
            }
            catch
            {
                bezi_query = false;
            }
            tmpstr = ep.Message;
            bezi_query = false;
            CustomExHa.AddLog("Chyba MySQL: " + ep.Message + ". Query: " + query);
            if (ep.Message.IndexOf("already an open DataReader") > 0)
            {
                CustomExHa.AddLog("Zatvaram MySQL. Query: " + query);
                MYSuperConn.Close();
                return spustiQuery(query);
            }
        }
        try
        {
            if (ds.Tables.Count > 0)
            {
                tmp = ds.Tables[0];
            }
            else
            {
                tmp = null;
            }
        }
        catch (Exception ep)
        {
            tmpstr = ep.Message;
            bezi_query = false;
            CustomExHa.AddLog("Chyba MySQL: " + ep.Message + ". Query: " + query);
        }

        bezi_query = false;
        DateTime koniec = DateTime.Now;
        TimeSpan trvanie = koniec - zaciatok;
        if ((tmp == null) && (query.IndexOf("SELECT ") > -1)) CustomExHa.AddLog("Chyba MySQL: Null Result. Query: " + query);
        if (nastavenia.LOG) CustomExHa.AddLog("Koncim query: " + query + ". Trvanie: " + trvanie.TotalMilliseconds.ToString() + " ms.");
        return tmp;
    }

0 个答案:

没有答案