Usuario
exportar datos Excel de la DataGridView a SQL server

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)
private void Btn_Guardar_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());
}
}
{
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.
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
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.
-
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