c# - 从 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);
}
解决方案
尝试加载到数据阅读器并循环遍历值。
SqlDataReader dr = cmd.ExecuteReader();
foreach (DataRow drow in dtSchema.Rows)
{
//manually add columns here from dr
}
去这里了解详情: 从数据阅读器填充数据表
推荐阅读
- objective-c - Objective-c:使用块的方法如何返回对象
- python-3.x - Python Pandas Dataframe 用同一会话的另一个单元格的值替换单元格值
- azure - Azure 中的 CORDA 节点配置
- java - 如何创建一个多选项卡式 Eclipse 视图,使每个选项卡都包含自己的视图?
- orocommerce - 使用 API 仅从 orocommerce 获取已发货的订单
- php - 无法理解为什么“调用空控制器/Admin.php 112 上的成员函数 send_notification()”
- javascript - vue.js - 嵌套组件架构中的路由
- unity3d - 使用动画师更改玩家精灵
- multithreading - 哪种多线程模型更适合对服务器进行编程以响应 udp 或 tcp?
- angularjs - 如何使用 ng-repeat 在 asp.net 中填写表格?