Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何避免;“没有回应”;从Excel到SQL SERVER的大型导入中表单中的消息_C#_Sql Server_Excel_Forms - Fatal编程技术网

C# 如何避免;“没有回应”;从Excel到SQL SERVER的大型导入中表单中的消息

C# 如何避免;“没有回应”;从Excel到SQL SERVER的大型导入中表单中的消息,c#,sql-server,excel,forms,C#,Sql Server,Excel,Forms,我的程序将数据从Excel导入或导出到数据库。您必须从中选择所需的excel文件,打开“文件”对话框,然后单击“发送”按钮 编辑:问题是当我导入方法时,它会使我的表单显示“无响应”消息。CargarNumero()方法对每个插入进行选择和更新(此表有7K行) 导入 private void importarDatos() { DB con = new DB(path); string tabNombre = ""; string tabApell

我的程序将数据从Excel导入或导出到数据库。您必须从中选择所需的excel文件,打开“文件”对话框,然后单击“发送”按钮

编辑:问题是当我导入方法时,它会使我的表单显示“无响应”消息。CargarNumero()方法对每个插入进行选择和更新(此表有7K行)

导入

private void importarDatos()
{
        DB con = new DB(path);

        string tabNombre = "";
        string tabApellidos = "";
        string tabID = "";
        SqlDecimal tabImporte = 0;
        int porc = 0;
        string year = "";

        Excel.Application xlApp = new Excel.Application();
        Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(txtFilePath.Text);
        Excel._Worksheet xlWorksheet = (Excel._Worksheet)xlWorkbook.Sheets[1];
        Excel.Range xlRange = xlWorksheet.UsedRange;

        xlRange = xlWorksheet.get_Range("A1", Missing.Value);
        xlRange = xlRange.get_End(Excel.XlDirection.xlToRight);
        xlRange = xlRange.get_End(Excel.XlDirection.xlDown);

        string downAddress = xlRange.get_Address(
            false, false, Excel.XlReferenceStyle.xlA1,
            Type.Missing, Type.Missing);

        xlRange = xlWorksheet.get_Range("A1", downAddress);

        object[,] values = (object[,])xlRange.Value2;

        int rowCount = values.GetLength(0);
        int colCount = values.GetLength(1);

        CargaProgreso cp = cargarProgreso();
        cp.Show();

        if ((cboYear.Visible) && (!cboYear.Text.Equals("")))
        {
            year = cboYear.Text;
        }
        else
        {
            year = DateTime.Now.Year.ToString();
        }

        for (int i = 2; i <= rowCount; i++)
        {
            for (int j = 1; j <= colCount; j++)
            {
                if (j == 1)
                {
                    tabNombre = values[i, j].ToString();
                }
                else if (j == 2)
                {
                    tabApellidos = values[i, j].ToString();
                }
                else if (j == 3)
                {
                    tabID = values[i, j].ToString();
                }
                else
                {
                    tabImporte = Convert.ToDecimal(values[i, j].ToString());
                }
            }
            string query = "INSERT...";
            try
            {
                porc = Convert.ToInt32(i * 100 / rowCount);
                cp.Progreso.Value = porc;
                con.Consulta(query);
                Thread.Sleep(1);
                con.Cerrar();
                cargarNumero();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error en la importación " + ex);
            }
        }
        cp.Close();
        MessageBox.Show("Importación de datos completada");
    }
private void exportarDatos(Excel.Application xlApp, Excel.Workbook xlWorkbook)
    {
        SaveFileDialog sfd = new SaveFileDialog();
        string ruta = "*";
        sfd.InitialDirectory = ruta;
        sfd.DefaultExt = "xlsx";
        sfd.Filter = "Excel Files |*.xls;*.xlsx;*.xlsm;*.xlsb";

        DB con = new DB(path);

        int porc = 0;

        CargaProgreso cp = cargarProgreso();
        cp.Text = "Exportando a Excel...";

        SqlDataAdapter da = new SqlDataAdapter("*", con.Conexion);
        System.Data.DataTable dt = new System.Data.DataTable();
        da.Fill(dt);
        DataColumnCollection dcCollection = dt.Columns;

        if (!Directory.Exists(ruta))
        {
            DirectoryInfo di = Directory.CreateDirectory(ruta);
        }
        DialogResult dialogResult = MessageBox.Show("¿Desea guardar la Copia de seguridad?", "Copia de seguridad", MessageBoxButtons.YesNo);
        if (dialogResult == DialogResult.Yes)
        {
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                for (int i = 1; i < (dt.Rows.Count + 1); i++)
                {
                    for (int j = 1; j < (dt.Columns.Count + 1); j++)
                    {
                        if (i == 1)
                        {
                            xlApp.Cells[i, j] = dcCollection[j - 1].ToString();
                        }
                        xlApp.Cells[i + 1, j] = dt.Rows[i - 1][j - 1].ToString();
                    }
                    porc = Convert.ToInt32(i * 100 / dt.Rows.Count);
                    cp.Progreso.Value = porc;  
                }
                cp.Close();
                xlWorkbook.SaveCopyAs(sfd.FileName);
                xlWorkbook.Saved = true;
                xlWorkbook.Close();
                MessageBox.Show("Copia de Seguridad creada en " + sfd.FileName);
            }
        }
        con.Cerrar();
        cp.Close();
    }

您需要在一种形式中引用另一种形式。您可以在A的EventHandler中创建表单B并显示它。您希望在A(从B)中显示的数据,可以填充到列表中,或者任何时候都可以将其检索


另一种方法是使用自定义事件,这些事件将在表单之间发出信号,表示需要对来自Eventarguments的数据进行处理。我在这个线程中找到了解决方案。如果有人需要帮助


我遇到的问题是,当我在if(rbsustituva.Checked)中调用cExcel.Show()时,它不会显示其他表单的标签和文本,但在if(rbSustitutiva.Checked)中,第一个cExcel.Show运行正常,但第二个没有(我的意思是,当它有连接和commandtext时,它不能正常工作,但我不知道是否是因为它)。老实说,我不知道问题在哪里,我不相信你会很快发现它。我能看到大约100行代码(甚至更多)在一个方法事件处理程序中。这太疯狂了。你应该以一种更有意义的方式重构此代码,你会发现错误更容易。你有几个独立的代码块。首先你应该有一个数据访问层。其次,你可以对复选框场景使用几种策略。请重构它。我怀疑你会发现任何愿意调试100行代码的人。是的,这就是我要做的。对不起,我是一个初学者。因为您调用了cExcel,所以无法看到您的更改。退出第一个代码时关闭。我的表单(b)由于显示数据导入的进度,只有2个标签和2个文本框。在这两种情况下都显示了表单,但我遇到的问题是,它既不显示标签也不显示文本框(实际上它甚至不显示元素的格式属性,如背景色等)。