日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

定义了过多字段-Excel

發布時間:2024/9/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 定义了过多字段-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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。