八月 2008 | The Will Will Web

The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

透過 OleDb 精準讀入 Excel 檔的方法

之前因為有個案子要做 Excel 匯入的功能,需要讓客戶先下載匯入檔案範本,然後讓客戶上傳 Excel 檔 ( *.xls ),再透過 C# 讀取資料後存入資料庫,我是採用 OleDb 的方式在 Server 端開啟檔案並將資料讀出,不過卻遇到了幾個難解的問題,其中最討厭的問題就是透過 OleDb 載入資料時,它都會自動判斷 Excel 中每個欄位的型別,假設工作表中的第三欄的前 8 列的值是「數字」,而第 9 列的「文字」的話,當讀取到第 3 欄第 9 列的時候,該儲存格的欄位值就會是 Null,可能會引發程式執行錯誤(因為你會預期有資料)。

... 繼續閱讀 ...

當使用 DetailsView + LinqDataSource 時發生更新衝突

之前我曾經寫過一篇【解決 LINQ to SQL 資料庫更新衝突的情形】,主要是講解在寫 LINQ to SQL 程式的時候(Code Behind)若發生衝突的解決辦法,但我最近遇到的問題是,當我的頁面用的是 DetailsView + LinqDataSource 且完全是用宣告(Declarative)的方式寫成的,也就是改頁並沒有寫任何程式碼,這時發生了衝突的狀況的錯誤訊息是 Row not found or changed (如下圖示),不過卻完全看不出哪裡錯了,只知道新增資料的時候不會出錯,但每次更新或刪除的時候都會出錯,而從堆疊追蹤(Stack Trace)所顯示的訊息來看,也沒地方讓我修改,遇到這種問題先不要驚慌,因為這應該只能用我文章中說明的第三種方法進行設定了。

... 繼續閱讀 ...

在 ASP.NET 中強迫輸出 BOM 字元的方式

我最近發現就算我的 ASP.NET 頁面是用 UTF-8 編碼(包含BOM字元)、或在頁面中設定 ResponseEncoding 為 UTF-8 編碼,最後輸出到瀏覽器的文件都一定不會有 BOM ( Byte-order mark ) 字元,這就很有可能造成 Browser 誤判網頁的編碼,我特別強調是「可能」會誤判而已,在我實際的工作經驗裡,瀏覽器在讀取沒有 BOM 字元的 UTF-8 網頁都沒出問題過,不過當我們選取【檢視 -> 原始檔】的時候,網頁內容被預設編輯器開啟的時候,編輯器就真的「很有可能」會誤判了,像我同事的 Notepad++ 在開啟網頁原始檔時,就幾乎全部變亂碼必須要手動切換到「編譯成 UTF-8 碼」才會變正常。(奇怪的是這些事總不會在我的電腦發生,不知道是不是我的電腦吃了我太多的口水所致)

... 繼續閱讀 ...