定义了过多字段-Excel
//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,單擊保存文件菜單上,并保存不同的名稱表。?填充新表,原始表中的數據。?然后,刪除原始表,并重命名為原始表名稱的新表。您還可以通過壓縮數據庫來釋放內部的列數。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的定义了过多字段-Excel的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务器维护:FTP无法连接
- 下一篇: 我不杀伯仁(我不杀伯仁伯仁却因我而死什么