如何使用SMO连接到Sqlserver2008任何解决方法都必须完成?

我写这个是为了在本地机器上找到sql server实例:

using System; using System.Data; using Microsoft.SqlServer.Management.Smo; namespace Application3 { class Program { static void Main(string[] args) { string srvname = string.Empty; string srvnames = null; DataTable dt = SmoApplication.EnumAvailableSqlServers(true); Console.WriteLine("------------->" + dt.Rows.Count); foreach (DataRow dr in dt.Rows) { try{ Console.WriteLine("-->Instance " + dr["name"]); Server srv = new Server((string)dr["name"]); foreach (Database db in srv.Databases) Console.WriteLine(db.Name); }catch(Exception e) { Console.writeLine(e.toString()); } } } } 

我的本地机器有3个实例

  1. rk2k3-vm-sr(sql2008实例)
  2. rk2k3-vm-sr \ sql2k8express(sql2k8 instacne)
  3. rk2k3-vm-sr \ sqlexpress(sql2k5实例)

但它只显示2和3. 1没有显示。 当我使用服务器对象连接时,sql2k8express失败了。

这是输出….


– >实例RK2K3-VM-SR \ SQLEXPRESS

模型
MSDB
tempdb中


– >实例RK2K3-VM-SR \ SQL2K8EXPRESS

Microsoft.SqlServer.Management.Common.ConnectionFailureException:无法连接到服务器RK2K3-VM-SR \ SQL2K8EXPRESS。 —> Microsoft.SqlServer.Management.Com mon.ConnectionFailureException:不支持此SQL Server版本(10.0)。 Microsoft.SqlServer.Management.Commun.ConnectionManager.Connect()上的Microsoft.SqlServer.Management.Common.ConnectionManager.InternalConnect(Wi ndowsIdentity impersonatedIdentity)中的Microsoft.SqlServer.Management.Common.ConnectionManager.CheckServerVersion(ServerVersion版本)。内部exception堆栈跟踪结束—位于Microsoft.SqlServer.Management.Commun.ConnectionManager.PoolConnect()的Microsoft.SqlServer.Management.Common.ConnectionManager.Connect(),位于Microsoft.SqlServer.Management.Common.ConnectionManager.get_ServerVersion( )Microsoft.SqlServer.Management.Smo.ExecutionManager.get_ServerVersion()at Microsoft.SqlServer.Management.Smo.SqlSmoObject.GetDbComparer(Boolean inSe rver)at Microsoft.SqlServer.Management.Smo.SqlSmoObject.InitializeStringComparer()at Microsoft.SqlServer .Management.Smo.AbstractCollectionBase.get_StringCompar er()在Microsoft.SqlServer.Management.Smo.SmoC的Microsoft.SqlServer.Management.Smo.SimpleObjectCollectionBase.InitInnerCol lection() 位于C的ConsoleApplication3.Program.Main(String [] args)的Microsoft.SqlServer.Management.Smo.SmoCollectionBase.GetEnumerator()中的Microsoft.SqlServer.Management.Smo.SmoCollectionBase.InitializeChildCollec tion(布尔刷新)中的ollectionBase.get_InternalStorage() :\ Documents和Settin gs \ Administrator.APP \ Desktop \ ConsoleApplication3 \ Program.cs:第25行

我怎样才能解决这个问题? 我的系统防火墙已禁用,并且所有sql服务都在运行。

这段代码以前是为SQL 2005编写的吗? 如果是,你需要

  1. 在计算机上为SQL 2008 +管理对象安装SQL 2005 Backwards Compatibilty Pack。 ( http://www.microsoft.com/downloads/details.aspx?FamilyID=b33d2c78-1059-4ce2-b80d-2343c099bcb4&displaylang=en

  2. 删除对SLQ 2005 SDK dll的引用并重新引用SQL 2008的SK Dll。( http://msdn.microsoft.com/en-us/library/ms162129.aspx

  3. 重建。

另请参阅: 应用程序在SQL 2008机器上找不到Microsoft.SQLServer.SMO