//p_Path :Excel文件目录

publicDataTableGetDataFromExcel(stringp_Path)

{

stringstrCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + p_Path + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=0'";

OleDbConnectionconExcel = newOleDbConnection(strCon);

DataSetds = newDataSet();

DataTabledt = newDataTable();

try

{

if (!File.Exists(p_Path))

{

dt.TableName = "false";

}

else

{

conExcel.Open();

stringstrSql = "select * from  [Sheet1$A:CV] where [银行账号] is not null and [银行账号] <> ''";

//  stringstrSql = "select * from  [Sheet1$] where [银行账号] is not null and [银行账号] <> ''";

OleDbDataAdaptermyDataAdapter = newOleDbDataAdapter(strSql, conExcel);

inti = myDataAdapter.SelectCommand.Parameters.Count;

System.Data.OleDb.OleDbCommandBuilderbuilder = newOleDbCommandBuilder(myDataAdapter);

builder.QuotePrefix = "[";     //获取insert语句中保留字符(起始位置)

builder.QuoteSuffix = "]"; //获取insert语句中保留字符(结束位置)

myDataAdapter.Fill(ds, "Sheet1$");//这个地方会报错“定义了过多的字段”

dt = ds.Tables[0].Copy();

conExcel.Close();

ds.WriteXml("c:\\EXML.xml"); //Excel To XML

}

}

catch (Exceptione)

{

if (conExcel.State == ConnectionState.Open)

conExcel.Close();

log4net.LogManager.GetLogger(this.GetType()).Error("GetDataFromExcel(" + p_Path + ")", e);

dt.TableName = "false";

}

File.Delete(p_Path);//删除文件

returndt;

}

stringstrSql = "select * from  [Sheet1$] where [银行账号] is not null and [银行账号] <> ''";

使用上面会出现“定义了过多的字段”这个错误。 郁闷的是你的Excel表字段就几十列(有效数据列),为什么会说“定义了过多的字段”呢?,为什么我要特别强调是有效的数据列呢????

问题原因:

Excel总列数是A-IV (255个单位长度),建立Excel时候,执行了插入操作,会是Excel长度超过255(虽然列数还是A-IV),导致无法读取。用上面的查询语句没有限制Sheet1$ 这张表的列数(程序在构造OleDbDataAdapter会加载所有的列数,包括空白列),这样就超过了Excel长度域

解决方法:

目前我这张Sheet1$表有效数据列最长只有100列(其他的是空白列),所以查询条件我就限定在A—CV列,这样就在myDataAdapter.Fill(ds, "Sheet1$");就不会报”定义了过多的字段”出错。

我猜想,插入行也同样会出现这样的问题,只要我们在查询条件下,限定行数和列数就可以避免此类问题。

官网的解释

症状:

当您添加新字段或更改现有字段的属性后,保存表时,您收到消息"定义了过多的字段,"跟邮件"中遇到错误保存。 数据类型未被更改"。 即使您有 255 个或更少在表中定义的字段,您将会收到这些消息。注意: 您还收到此信息如果添加或修改基于具有太多的字段的表的报表中的字段。注意: 此错误消息生成 Microsoft Jet 数据库引擎 3.0 保留的错误号 3190。本文假定您熟悉 Visual Basic for Applications 和创建 Microsoft Access 应用程序使用随 Microsoft Access 提供的编程工具。 有关 Visual Basic for Applications 的更多信息,请参阅"构建应用程序与 Microsoft Access"手册的版本。注意: Visual Basic for Applications 被称为 Access Basic 在 Microsoft Access 版本 1 x 和 2.0。 有关 Access Basic,请参考 Microsoft Access 版本 1 x 中的"介绍到 Programming"手动或在 Microsoft Access 版本 2.0"构建应用程序"手册

原因:

若要释放内部的列数为已删除的字段或字段,修改其属性,执行以下项:

·         在 Microsoft Access 7.0 或 97,单击另存为 / 导出在的文件菜单并保存不同的名称表。 然后,删除原始表,并重命名为原始表名称的新表。警告: 在文件菜单在版本 1 x 或 2.0 上单击另存为复制表,不记录结构。 在使用追加查询来填充新的表之前,不要删除原始表。

·         在 Microsoft Access 1 x 或 2.0,单击保存文件菜单上,并保存不同的名称表。 填充新表,原始表中的数据。 然后,删除原始表,并重命名为原始表名称的新表。您还可以通过压缩数据库来释放内部的列数。

定义了过多字段-Excel相关推荐

  1. 导入Excel表里的数据时产生【定义了过多字段】,但有时又是成功的

    filePath = @"d:\users.xls"; string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data S ...

  2. access2007 定义了过多字段_定义了过多的字段错误 | Microsoft Docs

    在 Access 中保存表时出现 "定义过多的字段" 错误 2020/5/22 适用于: Access for Office 365, Access 2019, Access 20 ...

  3. access2007 定义了过多字段_Access数据库中“ 查询过于复杂”问题的一些解决方案...

    对于饱受诟病的Access各个版本中存在的当字段数目过多时(不同的版本数目数目不定,有的为40个有的为50或更多),似乎Access2007依然存在此问题,当进行Update等操作时会产生" ...

  4. access2007 定义了过多字段_Access 2007多值字段指南

    Access 2007 多值字段指南 本主题涵盖 Office Access 2007 和 Windows SharePoint Services 中的多值字段. 如何创建多值字段.何时使用多值字段, ...

  5. 最小的语言符号是A词B语素C音素D义素,智慧职教: 下列选项中,定义全文索引的字段的数据类型必须是( )...

    智慧职教: 下列选项中,定义全文索引的字段的数据类型必须是( ) 更多相关问题 [多选题]计算机在信息处理中的作用包括(). A. 数据加工 B. 多媒体技术 C. 通信 D. 智能化决策 [单选题] ...

  6. 字段定义_逐浪CMS对用户注册字段正则的自由定义(注册字段必填)

    在逐浪CMS中,经常会遇到自由字段增加功能.这也是逐浪CMS的强大特色,比如注册页加字段: 如果加了这段,如何定义其正则呢? 其实很简单,只要编辑AreasUserViewsIndexRegister ...

  7. VUE项目兼容IE11 遇见的问题 SyntaxError: strict 模式下不允许一个属性有多个定义;ie11下载excel文件需要用navigator.msSaveBlob

    最近要把vue项目兼容ie11 前面引入bable等一系列操作就不说了,下面说一下具体具体的问题 1  如图所示  SyntaxError: strict 模式下不允许一个属性有多个定义, 点击sta ...

  8. Java中定义布尔类型字段,为什么不建议使用 isXxx 形式

    在日常开发中,我们会经常要在类中定义布尔类型的变量,比如在给外部系统提供一个RPC接口的时候,我们一般会定义一个字段表示本次请求是否成功的. 关于这个"本次请求是否成功"的字段的定 ...

  9. C方法中定义静态static字段是什么意思?

    最近在看 C 语言,发现在方法中居然还可以定义 static 变量,有点意思,代码如下: int test() {int num1 = 10;static int num2 = 6;printf(&q ...

最新文章

  1. 【注意事项】论文/申报书格式
  2. shell中的map使用
  3. python新手项目-Python 的练手项目有哪些值得推荐?
  4. Android之自定义view引用xml,Android自定义View在XML中映射错误
  5. 《实现领域驱动设计》读书笔记
  6. php 利用个人邮箱,利用 Composer 完善自己的 PHP 框架(二)——发送邮件
  7. 吴立德机器学习笔记(转)
  8. 【Java数据结构】二叉排序树
  9. java xml解析 jdom_Java XML解析工具 JDOM介绍及使用实例
  10. 使用深度学习和物理约束求解偏微分方程
  11. STC12C5A60S2的EEPROM应用
  12. Crowd 和 JIRA、Confluence、Fisheye and Crucible共享账户集成登入
  13. wordpress框架图片上传
  14. EasyCVR添加萤石云SDK接入的设计与开发流程
  15. 什么是服务治理?为什么需要服务治理?
  16. 第五章 彩色图像处理
  17. Oracle ERP系统日常维护和巡检
  18. 如何将微信公众号文章的长网址转换为短网址?
  19. 从张鑫旭的demo中,我学到了图像拉伸的原理
  20. 软件打包为exe NSIS单文件封包工具V2.3

热门文章

  1. QT的QDrag类的使用
  2. C++ Opengl纹理贴图源码
  3. php中session中的变量未定义,我的PHP页面SESSION变量无法储存该怎么办?
  4. mysql5.5 配置_MySQL5.5 安装配置方法教程
  5. go io.reader 多次读取_Go 经典入门系列 24:Select
  6. 23-26 Python File方法、OS文件/目录方法、异常处理、内置函数
  7. Mongodb参数详解(参考:http://blog.csdn.net/freebird_lb/article/details/8229567)
  8. Strom集群安裝,Python安裝,Strom配置,Strom常用命令
  9. SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法
  10. 1高并发服务器:多进程服务器