Principales respuestas
El índice (basado en cero) debe ser mayor o igual a cero y menor que el tamaño de la lista de argumentos.

Pregunta
-
Buenos días Compañeros
verán estoy tratando de cargar un excel a un gridview pero al intentarlo me da este error
El índice (basado en cero) debe ser mayor o igual a cero y menor que el tamaño de la lista de argumentos.
este es mi codigo
private void Import_To_Grid(string FilePath, string Extension, string isHDR) { string conStr = ""; switch (Extension) { case ".xls": //Excel 97-03 conStr = ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString; break; case ".xlsx": //Excel 07 conStr = ConfigurationManager.ConnectionStrings["Excel07ConString"].ConnectionString; break; } conStr = String.Format(conStr, FilePath); OleDbConnection connExcel = new OleDbConnection(conStr); OleDbCommand cmdExcel = new OleDbCommand(); OleDbDataAdapter oda = new OleDbDataAdapter(); DataTable dt = new DataTable(); cmdExcel.Connection = connExcel; //Get the name of First Sheet connExcel.Open(); DataTable dtExcelSchema; dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString(); connExcel.Close(); //Read Data from First Sheet connExcel.Open(); cmdExcel.CommandText = "SELECT * FROM [" + SheetName + "]"; oda.SelectCommand = cmdExcel; oda.Fill(dt); connExcel.Close(); //Bind Data to GridView gvDatosSocios.Caption = Path.GetFileName(FilePath); gvDatosSocios.DataSource = dt; gvDatosSocios.DataBind(); }
ayúdenme porfa
Respuestas
-
el problema es que el if lo tienes aplicado mal. Primero preguntas y luego realizas una consulta a la después buscar la primera fila. El proceso sería hacer la,consulta y aplicar el if.
cambiar
if (dtExcelSchema.Rows.Count > 0) { connExcel.Open(); dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString(); connExcel.Close();
por
connExcel.Open(); dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); if(dtExcelSchema.Rows.Count>0) { SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString(); connExcel.Close();
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos
- Editado Sergio ParraModerator sábado, 12 de marzo de 2016 13:45
- Propuesto como respuesta José De AlvaModerator viernes, 18 de marzo de 2016 3:37
- Marcado como respuesta José De AlvaModerator viernes, 25 de marzo de 2016 17:54
Todas las respuestas
-
hola
cuando defienes esta linea
string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
como sabes que hay una row ?
deberias primero validarlo usando
string SheetName = ""; if(dtExcelSchema.Rows.Count > 0){ SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString(); }
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Propuesto como respuesta Sergio ParraModerator jueves, 10 de marzo de 2016 8:29
-
Buenos días leandro
le comento ya aplique el código que me indico pero el error persiste
así quedo mi código con el cambio que me indico
private void Import_To_Grid(string FilePath, string Extension, string isHDR) { string conStr = ""; switch (Extension) { case ".xls": //Excel 97-03 conStr = ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString; break; case ".xlsx": //Excel 07 conStr = ConfigurationManager.ConnectionStrings["Excel07ConString"].ConnectionString; break; } conStr = String.Format(conStr, FilePath); OleDbConnection connExcel = new OleDbConnection(conStr); OleDbCommand cmdExcel = new OleDbCommand(); OleDbDataAdapter oda = new OleDbDataAdapter(); DataTable dt = new DataTable(); cmdExcel.Connection = connExcel; //Get the name of First Sheet string SheetName = ""; DataTable dtExcelSchema; if (dtExcelSchema.Rows.Count > 0) { connExcel.Open(); dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString(); connExcel.Close(); //Read Data from First Sheet connExcel.Open(); cmdExcel.CommandText = "SELECT * FROM [" + SheetName + "]"; oda.SelectCommand = cmdExcel; oda.Fill(dt); connExcel.Close(); //Bind Data to GridView gvDatosSocios.Caption = Path.GetFileName(FilePath); gvDatosSocios.DataSource = dt; gvDatosSocios.DataBind(); } }
no se en que me equivoque
-
Pero ¿en qué línea exactamente te da el error?
Píldoras .NET
Artículos, tutoriales y ejemplos de código .NETPíldoras JS
Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ... -
el problema es que el if lo tienes aplicado mal. Primero preguntas y luego realizas una consulta a la después buscar la primera fila. El proceso sería hacer la,consulta y aplicar el if.
cambiar
if (dtExcelSchema.Rows.Count > 0) { connExcel.Open(); dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString(); connExcel.Close();
por
connExcel.Open(); dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); if(dtExcelSchema.Rows.Count>0) { SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString(); connExcel.Close();
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos
- Editado Sergio ParraModerator sábado, 12 de marzo de 2016 13:45
- Propuesto como respuesta José De AlvaModerator viernes, 18 de marzo de 2016 3:37
- Marcado como respuesta José De AlvaModerator viernes, 25 de marzo de 2016 17:54