Как подключиться к Sqlserver2008 с помощью SMO любой обходной путь должен быть сделан? - PullRequest
1 голос
/ 16 июля 2009

Я написал это для поиска экземпляров сервера sql на локальной машине:

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
мастер * * 1 021 модель
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 олицетворение Identity) в 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 (Boolean inSe RVer) в Microsoft.SqlServer.Management.Smo.SqlSmoObject.InitializeStringComparer () в Microsoft.SqlServer.Management.Smo.AbstractCollectionBase.get_StringCompar эр () в 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 () в ConsoleApplication3.Program.Main (String [] args) в C: \ Documents and Settin gs \ Administrator.APP \ Desktop \ ConsoleApplication3 \ Program.cs: строка 25

Как я могу это исправить? Мой системный брандмауэр отключен, и все службы sql работают.

1 Ответ

3 голосов
/ 16 июля 2009

Этот код ранее был написан для SQL 2005? Если да, вам нужно

  1. Установите на машину пакет обратной совместимости SQL 2005 для SQL 2008 + объекты управления. (http://www.microsoft.com/downloads/details.aspx?FamilyID=b33d2c78-1059-4ce2-b80d-2343c099bcb4&displaylang=en)

  2. Удалить ссылки на SDK dll SLQ 2005 и ссылку на SK Dlls SQL 2008. (http://msdn.microsoft.com/en-us/library/ms162129.aspx)

  3. Rebuild.

См. Также: Приложение не может найти Microsoft.SQLServer.SMO на компьютере с SQL 2008

...