C# 用資料庫讀取Excel出現“定義了過多欄位”錯誤的解決方法
下面是提示錯誤的程式程式碼:
#region //ReferenceTable窗體FormLoad事件
private void ReferenceTable_Load(object sender, EventArgs e)
{
try
{
string strODBCCon = @"Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=.\ReferenceTable\K_ReferenceTable.xls;Extended Properties=Excel 8.0";
OleDbConnection OleDB = new OleDbConnection(strODBCCon);
OleDbDataAdapter OleDat = new OleDbDataAdapter("select * from
DataTable dt = new DataTable();
OleDat.Fill(dt);
this._rtDataGridView.DataSource = dt.DefaultView;
}
catch (System.Exception ey)
{
MessageBox.Show(ey.Message);
}
}
#endregion
標紅的行是指定讀取excel檔案的“K_rt”表格,這個表格用excel編輯時可能插入過列。
原因:
Excel總列數是A-IV (255個單位長度),建立Excel時候,執行了插入操作,會使Excel長度超過255(但列數還是顯示A-IV),從而導致讀取時提示“定義了過多欄位”。用上面的查詢語句沒有限制K_rt$ 這張表的列數(程式在構造OleDbDataAdapter會載入所有的列數,包括空白列),這樣就超過了Excel長度域。
解決方法:
我的K_rt$表有效資料列最長只有10列(其他的是空白列),所以查詢條件我就限定在A-K列,如:
OleDbDataAdapter OleDat = new OleDbDataAdapter("select * from[K_rt$A:K
,這樣就不會報”定義了過多的欄位”出錯。
插入行也應該會出現同樣的問題(目前我沒遇到過,純粹猜想,if(不慎猜對){純屬巧合;買彩票去;}),那麼限定行數和列數就可以避免此類問題