昨天在公司內部分享 Visual Studio 2010 資料庫專案開發密技,但在現場展示功能時 Visual Studio 2010 卻頻頻出包,我使用了這麼多年卻給我在重要時刻發生失誤,害我臨時換了台電腦做展示,還好不影響整體上課品質,公司同事也都反應非常熱烈,深刻感受 Visual Studio 2010 資料庫專案的強大魅力!上完課之後我依然心有不甘,最後還是將問題順利解決,以下是我修復這次問題的筆記。
首先,這個問題有 3 個徵兆:
1. 無法在「伺服器總管」中開啟「資料連接」的分類,原本建立的連接無法選取!
2. 在「伺服器總管」中新增資料連接時會出現「無法新增資料連接。指定的索引鍵不在字典中。」的錯誤
3. 在執行 結構描述比較 (Schema Compare) 時也會出現「指定的索引鍵不在字典中。」的錯誤
這又是另一個錯誤訊息讓人傻的狀況,因為訊息實在太過於一般,難以對訊息做出太多判斷,最後當然只能發揮福爾摩斯的辦案精神進一步抽絲剝繭、挖掘真相,我先依據發生錯誤的各種操作步驟進一步分析各種可能,再利用 Process Monitor 分析 devenv.exe 到底在發生錯誤的過程中做了什麼狗屁倒灶的事,然後再思考近日到底對這台出問題的電腦做過了什麼事、……等等。
分析了一些時間後,腦袋裡回想起上週有場 I'm a DBA - 微軟年度 SQL Server DBA 大會 的演講,過程中因為要建立資料庫連線,所有有用過「伺服器總管」來新增資料連接,這才驚覺我當時為了展示 Entity Framework 4 的 Model First Development 特性時有特別安裝了好幾套 Data Provider,其中包括了 Oracle 的 Oracle Data Provider for .NET 以及 MySQL 的 MySQL Connector/Net 等等,但前幾天因為沒用到而先將這幾個 Data Provider 都解除安裝了,因此便朝這個方向進一步偵錯,當然也順利解決問題。
原來這個問題的發生主因是我在之前建立了一個 Oracle 資料連接在「伺服器總管」的清單裡,當我將 Oracle Data Provider 移除掉之後該連線自然無法使用,然而當需要展開「伺服器總管」中的「資料連接」時,因為其中有個 Oracle 的資料連接項目找不到 Oracle Data Provider,但 Visual Studio 2010 並沒有將這部分的程式處理好,這才會發生「指定的索引鍵不在字典中」的錯誤。
解決方法就是清空原本在「伺服器總管」內所有的「資料連接」項目,最後我試著刪除以下檔案:
%APPDATA%\Microsoft\VisualStudio\9.0\ServerExplorer\DefaultView.SEView
%APPDATA%\Microsoft\VisualStudio\10.0\ServerExplorer\DefaultView.SEView
刪除該檔案之後重啟 Visual Studio 2010 所有功能皆已恢復正常,在此宣告此案順利偵破結案!(^_^)
套一句開發人員常說的話「程式之前是好的啊,沒去動他怎麼可能會出錯?」是的,千錯萬錯都是使用者的錯,要是所有使用者都照著開發人員想法來操作軟體電腦就永遠不會出錯了! (誤)!
我們還是多用正面的角度來思考問題,別怪微軟沒把軟體寫好,我們也都是軟體工程師,多想想自己的程式客戶怎麼操作使用,盡量站在使用者的立場想問題,該做的防呆措施絕不能少,我相信我們一定可以將軟體越寫越棒的!
不過這次出包又再度驗證了一句話「任何有可能出錯的事情,都肯定會有出錯的一天」。(莫非定律)
相關連結