天天看點

同時安裝ASA10以及ASA11兩個資料庫導緻不能使用SQLSERVER2005 management studio的問題解決

---------------------------------------------------------------------------

---- 本文為andkylee個人原創,請在尊重作者勞動成果的前提下進行轉載;

---- 轉載務必注明原始出處 : http://blog.csdn.net/andkylee

--- 2010-06-04 13:19:48

---- 關鍵字: ASA 10 11 SQLSERVER management studio  DbProvider

----------------------------------------------------------------------------

本人的pc機上裝的資料庫比較多。有:oracle 10g,MySQL5.0.45,Sybase ASE15.0.3,Sybase IQ15.1,MSSQLSERVER2005,MSSQLSERVER2000,Sybase Anywhere8,Sybase Anywhere9,Sybase Anywhere10等等。還有非安裝版的Sybase ASE12.5.x,ASA5,ASA6等。

資料庫比較多,都通過系統工具中的服務項來啟動不太現實。有時用到的時候直接用指令行啟動,這樣挺友善。系統資料庫資訊也省得維護了。

最近,在用SQLSERVER2005 management studio讀取表資料的時候,報了下面的兩個錯誤。

在對象資料總管中找到sqlserver2000資料庫中的使用者表,點右鍵“打開表”報錯如下:

标題: Microsoft SQL Server Management Studio

------------------------------

調用的目标發生了異常。 (SQLEditors)

------------------------------

其他資訊:

找不到請求的 .Net Framework 資料提供程式。可能沒有安裝。 (System.Data)

在對象資料總管中找到sqlserver2005中某個使用者資料庫中的使用者表,點右鍵“打開表”報錯如下:

标題: Microsoft SQL Server Management Studio

------------------------------

調用的目标發生了異常。 (SQLEditors)

------------------------------

其他資訊:

建立 system.data 的配置節處理程式時出錯: 列“InvariantName”被限制為是唯一的。值“iAnywhere.Data.SQLAnywhere”已存在。 (C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Config/machine.config line 126) (System.Configuration)

------------------------------

列“InvariantName”被限制為是唯一的。值“iAnywhere.Data.SQLAnywhere”已存在。 (System.Data)

問題怎麼解決呢?

在網上搜尋了很多,有說和MySQL有關的。的确我的pc上有MySQL5.0.45。但是将MySQL的相關項目去掉還是不管用。這些連結如下,

大家可以參考下:

找不到請求的 .Net Framework 資料提供程式。可能沒有安裝。

MySql “找不到請求的 .Net Framework 資料提供程式。可能沒有安裝。”解決方法

ASP.NET 2.0中如何連接配接到Mysql

根據通路sqlserver2005資料庫時的報錯,可能和.NET FRAMEWORK的配置檔案有關系。檢視C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/CONFIG下的machine.config檔案。發現的DbProviderFactories節下的最後四個項目為:

  <add name="SQL Anywhere 10 Data Provider" invariant="iAnywhere.Data.SQLAnywhere" description=".Net Framework Data Provider for SQL Anywhere 10" type="iAnywhere.Data.SQLAnywhere.SAFactory, iAnywhere.Data.SQLAnywhere,  Version=10.0.1.34152, Culture=neutral, PublicKeyToken=f222fc4333e0d400" />

     <add name="SQL Anywhere UltraLite.NET 10 Data Provider" invariant="iAnywhere.Data.UltraLite" description=".Net Framework Data Provider for SQL Anywhere UltraLite.NET 10" type="iAnywhere.Data.UltraLite.ULFactory, iAnywhere.Data.UltraLite,  Version=10.0.1.3415, Culture=neutral, PublicKeyToken=ff11483eb5a8c1a5" />

     <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=5.0.2.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 

     <add name="SQL Anywhere 11 Data Provider" invariant="iAnywhere.Data.SQLAnywhere" description=".Net Framework Data Provider for SQL Anywhere 11" type="iAnywhere.Data.SQLAnywhere.SAFactory, iAnywhere.Data.SQLAnywhere, Version=2, Culture=neutral, PublicKeyToken=f222fc4333e0d400" />

根據列"InvariantName"被限制為是唯一的。值"iAnywhere.Data.SQLAnywhere"已存在。觀察到SQL Anywhere 10 Data Provider 和 SQL Anywhere 11 Data Provider 這兩個項目下的 invariant 都是 "iAnywhere.Data.SQLAnywhere",嘗試着将"SQL Anywhere 11 Data Provider"項目删除 ,然後重新打開management studio,問題解決。

總結一下:問題不在于微軟的.NET FRAMEWORK3.5的安裝時間先後的問題, 是Sybase公司的Anywhere起的驅動程式名稱的問題。iAnywhere.Data.UltraLite 就沒問題。 為什麼SQL Anywhere 10和SQL Anywhere 11 都對應一樣相同的Invariant名稱呢?

如果ASA10和ASA11都裝在一台機器上,就肯定會出現這個問題。 不敢把SQL Anywhere 11 Data Provider對象的 invariant改為:iAnywhere.Data.SQLAnywhere11。反正我也不做資料庫開發,我隻關系資料庫管理方面的。 二者取其一,将SQL Anywhere 11 Data Provider項目暫時注釋掉,

 <!-- <add name="SQL Anywhere 11 Data Provider" invariant="iAnywhere.Data.SQLAnywhere" description=".Net Framework Data Provider for SQL Anywhere 11" type="iAnywhere.Data.SQLAnywhere.SAFactory, iAnywhere.Data.SQLAnywhere, Version=2, Culture=neutral, PublicKeyToken=f222fc4333e0d400" />  -->

儲存machine.config,重新啟動management studio。 問題解決。 哈哈。