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

  • 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

    miércoles, 9 de marzo de 2016 18:03

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


    sábado, 12 de marzo de 2016 13:44
    Moderador

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

    miércoles, 9 de marzo de 2016 18:25
  • 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


    viernes, 11 de marzo de 2016 16:03
  • Pero ¿en qué línea exactamente te da el error?


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    sábado, 12 de marzo de 2016 10:36
  • 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


    sábado, 12 de marzo de 2016 13:44
    Moderador