首页 > 解决方案 > 从 Excel 加载 DataTable:无法将“System.DateTime”类型的对象转换为“System.String”类型

问题描述

我正在尝试创建一个读取 Excel 文件的 Datatable,该文件具有 DateTime 列,其余所有列都是字符串。尝试将 DateTime 列转换为 Datetime 数据类型时,出现异常“无法将 'System.DateTime' 类型的对象转换为 'System.String' 类型。” 有人可以指导我如何解决这个问题。

try
        {
            string Ext = Path.GetExtension(Constants.XlFile);
            string connectionString = "";
            if (Ext == ".xls")
            {   //For Excel 97-03
                connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" + Constants.XlFile + "; Extended Properties = 'Excel 8.0;HDR=YES'";
            }
            else if (Ext == ".xlsx")
            {    //For Excel 07 and greater
                connectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source =" + Constants.XlFile + "; Extended Properties = 'Excel 8.0;HDR=YES'";
            }
            OleDbConnection conn = new OleDbConnection(connectionString);
            OleDbCommand cmd = new OleDbCommand();
            OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
            cmd.Connection = conn;
            conn.Open();
            DataTable dtSchema;
            dtSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            string ExcelSheetName = dtSchema.Rows[0]["TABLE_NAME"].ToString();
            conn.Close();
            //Read all data of fetched Sheet to a Data Table
            conn.Open();
            cmd.CommandText = "SELECT * From [" + ExcelSheetName + "]";
            dataAdapter.SelectCommand = cmd;
            dataAdapter.FillSchema(dt, SchemaType.Source);
            dt.Columns[0].DataType = typeof(String);
            dt.Columns[1].DataType = typeof(String);
            dt.Columns[2].DataType = typeof(String);
            dt.Columns[3].DataType = typeof(String);
            dt.Columns[4].DataType = typeof(DateTime);
            dt.Columns[5].DataType = typeof(String);
            dt.Columns[6].DataType = typeof(String);
            dt.Columns[7].DataType = typeof(String);
            //dataGrid2.Columns[4].CellTemplate.ValueType = typeof(DateTime);
            dataAdapter.Fill(dt);
            dataGrid2.DataSource = dt;

            conn.Close();

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

标签: c#c#-4.0c#-3.0

解决方案


尝试加载到数据阅读器并循环遍历值。

        SqlDataReader dr = cmd.ExecuteReader();


        foreach (DataRow drow in dtSchema.Rows)
        {
                //manually add columns here from dr
        }

去这里了解详情: 从数据阅读器填充数据表


推荐阅读