- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
首先,我想说我是在深水区,因为我只是对公司其他人编写的代码进行一些更改,使用 OleDbDataAdapter 与 Excel 进行“对话”,然后我'我不熟悉那个。那里有一个错误,我无法理解。
我正在尝试使用 OleDbDataAdapter 读取大约 450 行的 excel 文件。
在代码中是这样实现的:
connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source='" + path + "';" + "Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;\"");
connection.Open();
OleDbDataAdapter objAdapter = new OleDbDataAdapter(objCommand.CommandText, connection);
objAdapter.Fill(objDataSet, "Excel");
foreach (DataColumn dataColumn in objTable.Columns) {
if (dataColumn.Ordinal > objDataSet.Tables[0].Columns.Count - 1) {
objDataSet.Tables[0].Columns.Add();
}
objDataSet.Tables[0].Columns[dataColumn.Ordinal].ColumnName = dataColumn.ColumnName;
objImport.Columns.Add(dataColumn.ColumnName);
}
foreach (DataRow dataRow in objDataSet.Tables[0].Rows) {
...
}
除了一件事,一切似乎都运行良好。第二列主要填充四位数字,如 6739、3920 等,但 fice 行具有字母数字值,如 8201NO 和 8205NO。这五个单元格被报告为具有空白内容而不是它们的字母数字内容。我在 excel 中检查过,此列中的所有单元格都标记为文本。
顺便说一下,这是一个 xls 文件,而不是 xlsx。
有没有人知道为什么这些单元格在 DataRow 中显示为空白,但数字单元格显示正常?还有其他包含字母数字内容的列,显示得很好。
最佳答案
发生的事情是 excel 试图根据该列中的前几个值将数据类型分配给电子表格列。我怀疑如果您查看该列中的属性,它会说它是一个数字列。
当您开始尝试使用 jet 查询该电子表格时,问题就来了。当它认为它正在处理一个数字列并找到一个 varchar 值时,它会安静地返回任何内容。甚至没有神秘的错误消息。
作为一种可能的解决方法,您可以将其中一个字母数值移动到数据的第一行,然后尝试解析。我怀疑您随后会开始获取字母数字行的值...
看看this article .它详细介绍了这个问题。它还讨论了一种可能的解决方法:
However, as per JET documentation, we can override the registry setting thru the Connection String, if we set IMEX=1( as part of Extended Properties), the JET will set the all column type as UNICODE VARCHAR or ADVARWCHAR irrespective of ‘ImportMixedTypes’ key value.hey
关于c# - 使用 OleDbDataAdapter 从 Excel 工作表中获取数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3817378/
嘿,我正在使用 DataAdapter 读取 excel 文件并用该数据填充数据表。 这是我的查询和连接字符串。 private string Query = "SELECT * FROM Sheet
在我的应用程序中,我从本地 MS Access 数据库文件中获取一些数据。我对一个偶发问题感到困惑,我对特定表的所有记录的查询有时会返回所有记录,有时会返回除最后一条记录以外的所有记录。我正在使用以下
我在 sql server 表中有记录。我正在从 sql server 中填充 DataTable 中的所有记录,然后我想将所有记录插入访问表中。但是没有数据插入,插入时也没有发生错误。请提供需要的帮
我无法在 OleDbDataAdapter 中填充数据 我收到一个包含以下消息的 OleDbExceptionFROM 子句中的语法错误。 在这一行 adapter.Fill(dataset, "Us
我创建了一个包含两个表的数据库,然后我执行这段代码,但它对表没有任何作用。 private void CreateConstraint(DataSet dataSet, string table1,
我的 Windows 窗体应用程序包含 OleDbDataAdapter,从远程数据库获取数据需要花费更长的时间。它无法检索/保存 5000 行之类的表数据(应用程序受到攻击)。这是我的代码。 env
我正在使用 OleDbDataAdapter 读取数据集中 Excel 工作表的内容。 Excel 工作表由 20391 行组成,数据集在我的本地机器上运行时读取总行数,但在 IIS7.5 服务器上运
我正在尝试构建一个将读取 excel 文件(.xlsx、.xls)的应用程序。不幸的是,OleDbDataAdapter.Fill() 的性能非常糟糕。我最多需要 2 分钟才能从文件中读取一条记录。
我想在数据集中添加行,但只添加特定数量的行(为了避免“定义的字段过多”异常)。到目前为止,这是我尝试过的: OleDbCommand command = new OleDbCommand(@"SELE
我正在使用 C# 和 OleDb 访问 Oracle 数据库,我已经成功地从查询中提取数据,但是我无法使用 OleDbAdapter.Update() 更新数据库,我的更新代码如下。 (“适配器”是对
我的 Access 数据库中有一个这样的表 id name address date 1 first addresss 5/6/2005 9:17:52 AM 2 t
我正在使用 OleDbDataAdapter(准确地说是 Microsoft.ACE.OLEDB.12.0)从 Excel 工作簿中检索数据。对于一个表,我使用的是类型化数据集,但对于另一个表,我不能
有人能帮帮我吗?如何使用 OleDbDataAdapter 只读取 Excel 文件的第一行? 我知道如何从任何电子表格中读取所有数据: var dataAdapter = new OleDbData
我正在使用 OleDb 填充数据表。我正在尝试使用参数化查询,但它似乎不适用于 OleDbDataAdapter。有人有什么建议吗? cmd.CommandText = "SELECT A,B,C,D
我不确定我在这里做错了什么——在调试器中,对文件名所做的更改正确地应用于我为更新命令从中提取的数据集,但是当我检查之后数据库没有进行任何更改...所以我有点困惑... using (System.Da
首先,我想说我是在深水区,因为我只是对公司其他人编写的代码进行一些更改,使用 OleDbDataAdapter 与 Excel 进行“对话”,然后我'我不熟悉那个。那里有一个错误,我无法理解。 我正在
我正在使用 OleDbDataAdapter 从 excel 文件中提取 DataSet,但我在 SELECT 语句中遇到问题 DataSet excelDataSet = new DataSet()
我可以一次将一行添加到我的 Excel 电子表格中,但是速度非常慢(400 条记录需要 1 分钟,即使使用 Prepare 也是如此)。所以,我知道 Sql 是有效的并且 DataTable 是好的。
我不知道为什么,但是当我使用 OleDbDataAdapter 或 OleDbCommand 读取 CSV 文件时,在这两种情况下,结果数据的结构都很好(它识别文件头中的列),但行数据都是空的字符串。
我正在尝试获取一个 DataTable,读取一个 .xls 文件。如果我使用大小为 25kb 的 .xls 文件运行以下代码,它工作正常,但如果我加载更大的文件 (7,52MB),它就不起作用。 st
我是一名优秀的程序员,十分优秀!