для c # ExecuteNonQuery требуется открытое и доступное соединение. Текущее состояние соединения закрыто.

#c# #excel

#c# #excel

Вопрос:

может ли кто-нибудь узнать, почему я получаю эту ошибку? я пометил его там, где я получаю ошибку

 public string ExportRecords(string query, string sheetname)
    {
        string filename = "";
        DataSet ds = new DataSet("New_DataSet");
        DataTable dt = new DataTable(sheetname);

        ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
        dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;

        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["KMFConnectionString"].ToString());
        con.Open();

        string sql = query;
        SqlCommand cmd = new SqlCommand(sql, con);
        SqlDataAdapter adptr = new SqlDataAdapter();

        adptr.SelectCommand = cmd;
        adptr.Fill(dt);
        con.Close();

        ds.Tables.Add(dt);

        string connstr = connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="   orgrepository.OrganizationMetaValueByKey("KMFFileDownloadPath")   filename   "; Extended Properties=Excel 8.0";


        OleDbConnection connection = new OleDbConnection(connstr);


        using (OleDbCommand commands = connection.CreateCommand())
        {
            commands.CommandText = "CREATE TABLE [Sheet20] (F1 number, F2 char(255), F3 char(128))";
            commands.ExecuteNonQuery();     ****getting error here****
            for (int i = 1; i <= 20; i  )
            {

                commands.CommandText = "INSERT INTO [Sheet20] (F1, F2, F3) VALUES(1,"Fake Record","Fake Record")";
                commands.ExecuteNonQuery();
            }
        }

        if (dt.Rows.Count > 0)
        {
            //filename = sheetname   DateTime.Today.Day.ToString()   DateTime.Today.Month.ToString()   DateTime.Today.Year.ToString()   DateTime.Now.Hour.ToString()   DateTime.Now.Minute.ToString()   DateTime.Now.Second.ToString()   DateTime.Now.Millisecond.ToString()   ".xlsx";
            filename = sheetname   "-output"   ".xls";                
            ExcelLibrary.DataSetHelper.CreateWorkbook(orgrepository.OrganizationMetaValueByKey("KMFFileDownloadPath")   filename, ds);


            //    connection.Close();

       }
        return filename;
    }
  

Комментарии:

1. Где вы открыли соединение с помощью OleDbConnection?

2. string connstr = connstr = ... просто нужно быть string connstr = ...

3. Вы открыли свое SqlConnection, но не ваше OleDbConnection. Кроме того, оберните вещи в using блоки…

Ответ №1:

Вам нужно открыть и закрыть соединение следующим образом

  using (OleDbConnection connection = new OleDbConnection(connstr))
 {
     connection.Open();
     using (OleDbCommand commands = connection.CreateCommand())
     {
         //snip
     }
 }
  

Ответ №2:

Вы не вызывали, connection.Open() чтобы открыть соединение, которое пытаетесь использовать.

Ответ №3:

Ваше соединение закрыто, попробуйте команду Open и обработайте ошибки, если таковые имеются.

 using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        // The insertSQL string contains a SQL statement that
        // inserts a new row in the source table.
        OleDbCommand command = new OleDbCommand(insertSQL);

        // Set the Connection to the new OleDbConnection.
        command.Connection = connection;

        // Open the connection and execute the insert command.
        try
        {
            connection.Open();
            command.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        // The connection is automatically closed when the
        // code exits the using block.
    }