Как избавиться от «DataReader, связанного с этой командой» в среде развертывания - PullRequest
1 голос
/ 07 августа 2020

Я попытался найти здесь ответы, связанные с этой проблемой, и все они работают в тестовой среде, но не в развертывании.

У меня есть эта функция, которая хорошо работает в тестовой среде:

    static SqlConnection dbconn = new SqlConnection("Data Source=192.168.0.73;Initial Catalog=CAMFIN;Integrated Security=False;User ID=user;Password=password;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False");


    private static void CreateTable(string query, string filename, string subject, string reportref, string branch)
    {
        Console.WriteLine("Preparing data....");
        if (dbconn.State == ConnectionState.Closed)
        {
            dbconn.Open();
        }

        SqlDataAdapter da = new SqlDataAdapter();
        DataTable dt = new DataTable();

        using (SqlCommand cmd = new SqlCommand(query, dbconn))
        {
            cmd.Parameters.AddWithValue("@date", DateTime.Today);
            cmd.Parameters.AddWithValue("@branch", branch);

            cmd.CommandType = CommandType.Text;
            cmd.CommandTimeout = 0;

            da.SelectCommand = cmd;
            da.Fill(dt); //throws an error on production


            if (dt.Rows.Count >= 1)
            {
                string attachments = filedir + filename + ".xlsx";
                DatatableToExcel(dt, attachments, subject, filename);
                filestosend.Add(attachments);
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(branchname + " Office has no data to bound.");
            }
        }
    }

Когда я тестирую его на производстве, функция выдает ошибку.

Error:
An exception of type 'System.InvalidOperationException' occurred in System.Data.dll but was not handled in user code
Additional information: There is already an open DataReader associated with this Command which must be closed first.
...