none
exportar datos Excel de la DataGridView a SQL server RRS feed

  • Pregunta

  • Hola a todos

    Tengo una duda con el código que tengo producto a que me guarda todos los datos que necesito solo si el archivo Excel seleccionado esta abierto, en el caso de que el archivo Excel no esta abierto me tira un error donde el primer campo esta vacio por lo tanto no puede exportar a la BD SQL.

                                   

     private void Btn_Cargar_Click(object sender, EventArgs e)
            {

                string stRuta = "";
                OpenFileDialog openFD = new OpenFileDialog();
                Btn_Cargar.Cursor = Cursors.WaitCursor;
                openFD.Title = "Seleccionar archivos";
                openFD.Filter = "Archivos Excel(*.xls;*.xlsx)|*.xls;*xlsx|Todos los archivos(*.*)|*.*";
                openFD.Multiselect = true;
                //new ValorCelda().importarExcel(Grilla, "HojaPrueba$");
                //StrCon.ProcesosBatch();

                if (openFD.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    stRuta = openFD.FileName;
                }
                try
                {
                    string stConexion = ("Provider=Microsoft.ACE.OLEDB.12.0;" + ("Data Source=" + (stRuta + ";Extended Properties=\"Excel 12.0;Xml;HDR=YES;IMEX=2\";"))); //este es el codigo que funciona para office 2007 y 2010
                    OleDbConnection cnConex = new OleDbConnection(stConexion);
                    OleDbCommand Cmd = new OleDbCommand("Select * From [Datos$]", cnConex);
                    DataSet Ds = new DataSet();
                    OleDbDataAdapter Da = new OleDbDataAdapter();
                    DataTable Dt = new DataTable();
                    cnConex.Open();
                    Cmd.Connection = cnConex;
                    Da.SelectCommand = Cmd;
                    Da.Fill(Ds);
                    Dt = Ds.Tables[0];
                    this.Grilla.Columns.Clear();
                    this.Grilla.DataSource = Dt;
                    //cargamos Registros a la Tabla
                    Btn_Cargar.Cursor = Cursors.Default;
                    Btn_Guardar.Enabled = true;


                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, ToString());
                }


            }

     private void Btn_Guardar_Click(object sender, EventArgs e)
            {

                

                SqlCommand agregar = new SqlCommand("insert into BDProcesosDatos values (@Datos,@Productos,@Tarea)", ConexionProceso); //101
                
                ConexionProceso.Open();

                int filas = 0;
                try
                {

                    foreach (DataGridViewRow row in Grilla.Rows)
                    {

                        agregar.Parameters.Clear();

                        agregar.Parameters.AddWithValue("Datos", Convert.ToString(row.Cells["Datos"].Value));

                        agregar.Parameters.AddWithValue("Producto", Convert.ToString(row.Cells["Producto"].Value));

                        agregar.Parameters.AddWithValue("Tarea", Convert.ToString(row.Cells["Tarea"].Value));

                    

                        
                        agregar.ExecuteNonQuery();


                        filas++;





                    }
                    MessageBox.Show("Datos Agregados");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("fila: "+ filas + ex.Message);

                }
                finally
                {
                    ConexionProceso.Close();
                }

            }

    -Soy un programador principiante, de ante mano se agradecería cualquier opinión o ayuda.

    martes, 24 de diciembre de 2019 14:29

Todas las respuestas

  • Hola MarioCortez64

     

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma,  te comparto a continuación los siguientes enlaces en los cuales son documentación y casos similares que nos estas reportando

     

     https://social.msdn.microsoft.com/Forums/es-ES/9e389b30-eb41-40be-a32a-bf90d1917794/importar-datos-desde-excel-a-un-datagridview-pasar-los-datos-a-otro-datagridview-y-guardarlos-en-sql?forum=netfxes

     

    Gracias por usar los foros de MSDN.

     

    Pablo Rubio

     

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

     

    jueves, 26 de diciembre de 2019 16:19
    Moderador
  • hola

    >>en el caso de que el archivo Excel no esta abierto me tira un error donde el primer campo

    no creo entender lo que estas planteando, porque mencionas un error del cual no pones el mensaje que muestra, con lo cual no podria saber porque es que este fallando

    Si veo que usas ado.net para acceder al excel, por lo tanto eso de estar abierto el documento deberia ser al contrario, si lo estas editando puede que estes bloqueando el acceso al archivo, por eso falle

    Intenta cerrando el documento, y tambien valida en el Task Manager de windows que no quedara ninguna instancia de excel activa

    Si usas

    OleDbCommand Cmd = new OleDbCommand("Select * From [Datos$]", cnConex);

    para que despues haces

    Cmd.Connection = cnConex;

    eso esta de mas, asignas la conexion al objeto command dos veces de formas diferentes, si lo asignas en el constructor solo dejalo alli

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 27 de diciembre de 2019 13:48