代码之家  ›  专栏  ›  技术社区  ›  Cute

如何使用SMO连接到SQLServer2008需要解决任何问题?

  •  1
  • Cute  · 技术社区  · 17 年前

    我写这篇文章是为了在本地计算机上查找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虚拟机SR(SQL2008实例)
    2. RK2K3虚拟机SR\sql2k8express(sql2k8安装)
    3. RK2K3虚拟机SR\sqlexpress(sql2k5实例)

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

    这是输出……


    -->实例rk2k3-vm-sr\sqlexpress
    主人
    模型
    材料安全数据表
    温度数据库


    -->实例rk2k3-vm-sr\sql2k8express

    Microsoft.SqlServer.Management.Common.ConnectionFailureException:无法连接 ect到服务器rk2k3-vm-sr\sql2k8express。--->microsoft.sqlserver.management.com网站 mon.connectionfailureexception:不支持此SQL Server版本(10.0)。 在microsoft.sqlserver.management.common.connectionmanager.checkserverversion (服务器版本) 在Microsoft.sqlserver.management.common.connectionmanager.internalconnect(WI NdowsIdentity模拟标识) 在Microsoft.sqlserver.management.common.connectionmanager.connect() ---内部异常堆栈跟踪结束--- 在Microsoft.sqlserver.management.common.connectionmanager.connect() 在Microsoft.sqlserver.management.common.connectionmanager.poolconnect() 在Microsoft.sqlserver.management.common.connectionmanager.get\u服务器版本( ) 在Microsoft.sqlserver.management.smo.executionmanager.get_serverversion() 在Microsoft.sqlserver.management.smo.sqlsmoobject.getdbcomparer(布尔插入 服务器) 在Microsoft.sqlserver.management.smo.sqlsmoobject.InitializeStringComparer()上 在microsoft.sqlserver.management.smo.abstractcollectionbase.get_stringcompare ER() 在microsoft.sqlserver.management.smo.simpleobjectcollectionbase.initinnercol 选择() 在Microsoft.sqlserver.management.smo.smocollectionbase.get_internalstorage() 在Microsoft.SqlServer.Management.Smo.SmoCollectionBase.InitializeChildCollec 操作(布尔刷新) 在Microsoft.sqlserver.management.smo.smoclectionbase.getEnumerator()上 在控制台应用程序3.program.main(string[]args)中的C:\文档和设置 GS\administrator.app\desktop\consoleApplication3\program.cs:第25行

    我该怎么解决?我的系统防火墙已禁用,所有SQL服务都在运行。

    1 回复  |  直到 17 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

    这段代码以前是为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 dll的引用,并重新引用SQL 2008的sk dll。 ( http://msdn.microsoft.com/en-us/library/ms162129.aspx )

    3. 重建。

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