OldDbException: Too many field defined.

byustep 2009-12-22 03:14:50
我有一个excel表格,里面第一行是日期,2009全年的,所以估计有接近300列。
然后我想用OleDb来处理,基本语法如下:
private static DataSet ReadExcel(string filePath, string[] sheetNames)
{
// create connectoin.
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1\"";
OleDbConnection conn = new OleDbConnection(strConn);

DataSet ds = new DataSet();
try
{
conn.Open();
foreach (string name in sheetNames)
{
string sql = string.Format("select * from [{0}]", name);
OleDbDataAdapter myCommand = new OleDbDataAdapter(sql, strConn);
myCommand.Fill(ds, name);
}
return ds;
}
catch (Exception ex)
{
return ds;
}
finally
{
conn.Close();
conn.Dispose();
}
}

但是在myCommand.Fill(ds, name);的时候抛出Exception:Too Many Field defined.大家遇到过没?有没有好的解决方案。

我刚开始在想既然是OleDbException,那我该sql语句为select top 100 * from [{0}]试试看的,但是还是抛出该异常。。。

...全文
265 20 打赏 收藏 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwwb 2009-12-23
  • 打赏
  • 举报
回复
在ACCESS中测试:
SELECT * from [excel 8.0;database=r:\temp\book1.xls].[{0}$]
可以得到结果

"select * from [{0}]"->
"select * from [{0}$]"

楼主修改一下试试
byustep 2009-12-23
  • 打赏
  • 举报
回复
没关系,不过至少读取的时候不抛出异常,能读到最后一个:)
WWWWA 2009-12-23
  • 打赏
  • 举报
回复
呵呵,确实是这样,不能用SQL方式。
byustep 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 wwwwa 的回复:]
在VFP中用OLE方式打开XLS文件,可以得到最后一个列的值
ff=_ole_excel.Sheets(1).UsedRange.Columns.Count
FOR i=1 TO ff
IF i=ff
WAIT WINDOW _ole_excel.Sheets(1).cells(2,i).value
endif
ENDFOR 

看来必须用OLE方式了
[/Quote]

好像那个ff是256唉?正好是最大值,似乎还有值没读取出来:(
WWWWA 2009-12-23
  • 打赏
  • 举报
回复
是SELECT *,看来你要用OLE方式打开XLS
byustep 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wwwwa 的回复:]
用你的XLS文件,在ACCESS中
SELECT * from [excel 8.0;database=r:\temp\eonia_2009.xls].[eonia$]
测试,提示
定义了过多的列
[/Quote]
是啊是啊,这个不是我的Excel,我是取的internet上面的数据,我就纳闷人家这么多列怎么就能够填充进去的呢?
所谓的定义了过多的列,是指Excel定义过多的列,还是Sql语句select * 的时候返回过多的列呢?
WWWWA 2009-12-23
  • 打赏
  • 举报
回复
在VFP中用OLE方式打开XLS文件,可以得到最后一个列的值
ff=_ole_excel.Sheets(1).UsedRange.Columns.Count
FOR i=1 TO ff
IF i=ff
WAIT WINDOW _ole_excel.Sheets(1).cells(2,i).value
endif
ENDFOR

看来必须用OLE方式了
WWWWA 2009-12-23
  • 打赏
  • 举报
回复
用你的XLS文件,在ACCESS中
SELECT * from [excel 8.0;database=r:\temp\eonia_2009.xls].[eonia$]
测试,提示
定义了过多的列
byustep 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 acmain_chm 的回复:]
给一个你的SQL语句以供测试
[/Quote]
我是这样动态获取第一张sheet名字的:
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + xlsPath + ";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1\"";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();

DataTable excelTabs = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
string sheetName = excelTabs.Rows[0]["TABLE_NAME"].ToString();

调式看到SQL如下:select * from [Eonia$]
Excel路径如下:http://www.euribor.org/html/download/eonia/eonia_2009.xls

ACMAIN_CHM 2009-12-23
  • 打赏
  • 举报
回复
给一个你的SQL语句以供测试
byustep 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wwwwa 的回复:]
引用 6 楼 byustep 的回复:
引用 1 楼 wwwwb 的回复:
EXCEL版本是什么?2003及以下为255个字段


是的啊,我的是2003,我就不知道人家生成Excel数据的时候为什么能够超过255这个最大数字。有什么好的建议? 是Excel的问题吗?还是OleDb select 语句最多只允许select出255啊?

不会吧
EXCEL2007最大

1048576行;16384列

在2003中只有255列,超过除非用2007编辑
如果可以的话,
上传你的xls到www.access911.net/csdn
,用WINRAR压缩
[/Quote]

我已经给了excel的地址了,就搞不懂他怎么填充那些数据进去的:(
byustep 2009-12-23
  • 打赏
  • 举报
回复
谢谢大家,Excel文件的地址如下:http://www.euribor.org/html/download/eonia/eonia_2009.xls
大家可以下载下来试试看读取的时候有没有错误:)
WWWWA 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 byustep 的回复:]
引用 1 楼 wwwwb 的回复:
EXCEL版本是什么?2003及以下为255个字段


是的啊,我的是2003,我就不知道人家生成Excel数据的时候为什么能够超过255这个最大数字。有什么好的建议? 是Excel的问题吗?还是OleDb select 语句最多只允许select出255啊?
[/Quote]
不会吧
EXCEL2007最大

1048576行;16384列

在2003中只有255列,超过除非用2007编辑
如果可以的话,
上传你的xls到www.access911.net/csdn
,用WINRAR压缩
byustep 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wwwwb 的回复:]
在ACCESS中测试:
SELECT * from [excel 8.0;database=r:\temp\book1.xls].[{0}$]
可以得到结果

"select * from [{0}]"->
"select * from [{0}$]"

楼主修改一下试试
[/Quote]
我穿个的参数是带$的sheet 名字,所以不是这个地方的问题。
byustep 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 acmain_chm 的回复:]
console.writeline (sql) 看一下内容是什么,估计你的表名有问题。
[/Quote]
不是sql语句的问题,在小于255行的时候可以的。
byustep 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wwwwb 的回复:]
EXCEL版本是什么?2003及以下为255个字段
[/Quote]

是的啊,我的是2003,我就不知道人家生成Excel数据的时候为什么能够超过255这个最大数字。有什么好的建议? 是Excel的问题吗?还是OleDb select 语句最多只允许select出255啊?
ACMAIN_CHM 2009-12-22
  • 打赏
  • 举报
回复
"select * from [{0}]",

从这个语句分析,不可能是由于select * 中产生了过多的列。 应该是表名上的问题。
WWWWA 2009-12-22
  • 打赏
  • 举报
回复
Too many field defined:定义了过多的列
ACMAIN_CHM 2009-12-22
  • 打赏
  • 举报
回复
console.writeline (sql) 看一下内容是什么,估计你的表名有问题。
wwwwb 2009-12-22
  • 打赏
  • 举报
回复
EXCEL版本是什么?2003及以下为255个字段
数据集可视化效果见下方。 【数据集概况】 · 检测类别(中文):[公交车(bus), 车辆(vehicle)] · 训练集:1899 张 · 验证集:0 张 · 测试集:0 张 · 总计:1899 张 该数据集聚焦于城市道路环境下的车辆检测任务,旨在为智能交通系统提供高质量的标注数据支持。通过采集真实道路场景中的各类车辆图像,该数据集能够有效支撑车辆识别与分类模型的训练与优化,具有较高的实用价值和研究意义。数据集覆盖了多种车辆类型,包括公交车和普通车辆,为复杂交通环境下的目标检测提供了丰富的样本。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 96 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9950** mAP50-95 | 0.9884 Precision | 0.9513 Recall | 0.9659 train/box_loss | 0.0783 train/cls_loss | 0.0416 val/box_loss | 0.1259 val/cls_loss | 0.0771 【训练过程分析】 96 轮训练后 mAP50 达到 0.9950,模型收敛良好。Loss 曲线前段快速下降,后段趋于平稳,val_loss 无反弹,没有明显过拟合。mAP50-95 为 0.9884,和 mAP50 差距仅 0.01,框的定位精度也很扎实。 【模型性能评估】 Precision 0.9513、Recall 0.9659,精召双高,模型对公交车、车辆的检测能力强。多类检测中,不同类别性能可能有差异,需关注难例类别的表现。 【预测效果展示...
内容概要:本文系统研究了基于连续小波变换(CWT)与多种深度学习模型相结合的机械故障诊断方法,利用凯斯西储大学轴承故障公开数据集进行实验验证,并提供了完整的Matlab代码实现。研究首先通过连续小波变换将一维振动信号转化为二维时频图像,以增强信号的时频特征表达能力;随后构建并对比了CNN、ResNet、CNN-SVM、CNN-BiGRU、CNN-LSTM等多种深度神经网络模型用于故障分类识别,全面分析各模型在诊断精度、收敛速度与泛化能力等方面的性能差异。该研究融合信号处理与深度学习技术,属于具有创新性的未发表成果,达到可复现SCI一区论文水平。; 适合人群:适用于具备信号处理基础和机器学习知识,从事故障诊断、状态监测、工业自动化等领域的研究生、科研人员及工程技术开发者;尤其适合熟悉Matlab编程并希望开展相关课题研究或工程应用的专业人士。; 使用场景及目标:①应用于旋转机械设备(如电机、齿轮箱、轴承等)的早期故障检测与智能分类;②支撑学术科研中关于深度学习与信号处理融合方法的研究与高水平论文复现;③作为课程设计、毕业设计或科研项目的实践案例,提升从数据预处理到模型构建再到实证分析的全流程能力。; 阅读建议:建议结合所提供的Matlab代码同步运行与调试,重点关注连续小波变换的参数选择、时频图生成策略以及各类深度学习模型的网络结构设计与训练细节,同时可进一步探索其他小波基函数、优化算法或多模型融合策略以拓展研究深度。
内容概要:本文围绕基于定向M波段双树(希尔伯特)小波的多分量彩色图像去噪方法展开研究,提出一种融合方向选择性与多分辨率分析能力的小波变换技术,用于高效去除彩色图像中的复杂噪声。该方法充分利用M波段双树小波的冗余特性、方向敏感性和近似平移不变性,显著提升在高噪声环境下图像细节的保留能力与去噪性能,并通过Matlab代码实现完整的算法仿真、小波分解与重构流程以及多通道图像处理机制。研究系统评估了不同噪声类型和强度下的去噪效果,采用峰值信噪比(PSNR)、结构相似性(SSIM)等客观指标进行量化分析,验证了该方法在抑制噪声与保护纹理、边缘方面的优越性;; 适合人群:具备数字图像处理基础知识,熟悉小波变换理论及Matlab编程语言的研究生、科研人员,尤其适合从事图像去噪、计算机视觉、遥感图像处理及相关领域研究的专业技术人员;; 使用场景及目标:①应用于彩色图像在采集、传输过程中因传感器噪声、信道干扰等因素引起的质量退化恢复任务;②为医学影像、卫星遥感、安防监控等高保真图像处理系统提供先进的去噪模块技术支持;③作为学术研究中新型小波去噪算法的复现、性能对比与改进的基础平台; 阅读建议:建议读者结合提供的Matlab代码深入理解算法实现细节,重点关注小波分解层数的选择、方向滤波器组的设计、阈值处理策略的设定及其对去噪效果的影响,同时可通过与传统小波、VisuShrink、BayesShrink等经典去噪方法的对比实验,全面掌握该模型在不同场景下的优势与适用边界。

2,207

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧