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

时间:2009-07-16 05:54:43

标签: c# .net sql-server database-connection smo

我写这篇文章是为了在本地机器上找到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实例)
  4. 但它只显示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.Common.ConnectionManager.CheckServerVersion   (ServerVersion版)      在Microsoft.SqlServer.Management.Common.ConnectionManager.InternalConnect(Wi   ndowsIdentity impersonatedIdentity)      在Microsoft.SqlServer.Management.Common.ConnectionManager.Connect()      ---内部异常堆栈跟踪结束---      在Microsoft.SqlServer.Management.Common.ConnectionManager.Connect()      在Microsoft.SqlServer.Management.Common.ConnectionManager.PoolConnect()      在Microsoft.SqlServer.Management.Common.ConnectionManager.get_ServerVersion(   )      在Microsoft.SqlServer.Management.Smo.ExecutionManager.get_ServerVersion()      在Microsoft.SqlServer.Management.Smo.SqlSmoObject.GetDbComparer(布尔inSe   rver)      在Microsoft.SqlServer.Management.Smo.SqlSmoObject.InitializeStringComparer()      在Microsoft.SqlServer.Management.Smo.AbstractCollectionBase.get_StringCompar   ER()      在Microsoft.SqlServer.Management.Smo.SimpleObjectCollectionBase.InitInnerCol   经文()      在Microsoft.SqlServer.Management.Smo.SmoCollectionBase.get_InternalStorage()      在Microsoft.SqlServer.Management.Smo.SmoCollectionBase.InitializeChildCollec   (布尔刷新)      在Microsoft.SqlServer.Management.Smo.SmoCollectionBase.GetEnumerator()      在C:\ Documents和Settin中的ConsoleApplication3.Program.Main(String [] args)   gs \ Administrator.APP \ Desktop \ ConsoleApplication3 \ Program.cs:第25行

    我该如何解决这个问题?我的系统防火墙已禁用,所有sql服务都在运行。

1 个答案:

答案 0 :(得分:3)

此代码以前是否为SQL 2005编写过? 如果是,你需要

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

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

  3. 重建。

  4. 另请参阅:Application cannot find Microsoft.SQLServer.SMO on SQL 2008 machine