這幾天在用winform編寫一個小軟件需要連接數據庫,用到了Datagridview控件,但在根據[數據源配置嚮導]連接至數據庫時卻彈出了下面的錯誤信息:
圖片:
---------------------------
嚮導窗體
---------------------------
發生錯誤。
錯誤信息: 未能從程序集“Microsoft.VisualStudio.DataDesign.SyncDesigner.DslPackage, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”中加載類型“Microsoft.VisualStudio.DataDesign.SyncDesigner.SyncFacade.SyncManager”。
---------------------------
從網上找尋了一下解決辦法,親測後整理於此,希望能幫到那些遇到同樣問題的朋友們。
方法一:C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE目錄下的Microsoft.VisualStudio.DataDesign.SyncDesigner.DslPackage.dll版本過舊,找其他機器中的新版本dll覆蓋即可。
方法二:安裝VS2008SP1補丁文件。
先說明一下我電腦的配置,我的電腦是Windows XP sp3系統,安裝的是VS2008專業版,VS2010中文旗艦版,用的SQL Server 2005的數據庫。
爲了測試,我在兩臺Windows XP sp3系統虛擬機下,
系統①只安裝了VS2008專業版和Sql Server 2005數據庫;
系統②安裝了VS2008專業版,VS2010中文旗艦版和Sql Server2005數據庫。
點擊[運行]啓動程序,可以看到很順利的連接了數據庫。
然後:在系統②下進行測試:
安裝了vs2008,vs2010和sqlserver2005。
配置[選擇您的數據連接]:
點擊[下一步]後,彈出了下面的錯誤對話框:
可見,vs2008用Datagridview控件連接數據庫是失敗了。
下面,再在系統②下用vs2010按同樣過程測試一下:
建立Winform應用程序:
拖入Datagridview控件並連接數據庫:
連接數據庫成功後,點擊[下一步]彈出了[選擇數據庫對象]的窗口:
運行程序,正確顯示了數據庫信息:
綜上所述,可見該問題確實跟同時安裝vs2008和vs2010有關,vs2008中的部分文件受到了vs2010的影響。
解決辦法:
方法一:
是你的Microsoft.VisualStudio.DataDesign.SyncDesigner.DslPackage.dll版本過舊。找其他機器中的新版本dll覆蓋即可。
路徑: C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE
該方法本人未測試,因爲我電腦上所裝的vs2008和虛擬機中的都是一個版本,如下圖:
這是系統①下的:
這是系統②下的:
可見,兩個文件的創建時間、大小等都是一樣的。
也考慮過將vs2010下的該文件拷貝過來,但擔心不同版本引起軟件崩潰則沒有進行測試。
一個版本是9.0.21022.8,另一個版本是10.0.30319.1。
至於從vs2008其他版本中拷貝同一個文件過來則沒有進行進一步的測試。
重點說明方法二:
升級vs2008,安裝vs2008sp1補丁。
從微軟官網下載sp1補丁,安裝:
安裝過程等待完成就可以,安裝完成後查看vs2008的版本及.net framework版本:
然後再次連接數據庫,可見,[選擇數據庫對象]的對話框可以彈出了:
運行程序,連接數據庫正常:
附:vs2008sp1下載地址:
http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=27673c47-b3b5-4c67-bd99-84e525b5ce61
本人蔘考以下網文:http://blog.csdn.net/dantengmiaomi/article/details/6857781
測試目標:探測是否是由於同時安裝VS2008和VS2010後引起的該情況。
測試概述:在兩個系統下同樣用VS2008建立Winform程序,並用Datagridview控件連接Sql Server2005數據庫,並顯示數據。
首先:在系統①下進行測試。
只安裝了vs2008和sqlserver2005.
如下圖,可以看到,在選擇好[選擇您的數據連接]點擊下一步後彈出了[選擇數據庫對象]的對話窗口,然後可以選擇表、視圖、存儲過程、函數等。
如下圖,可以看到,數據庫中的字段已經顯示出來了