Как подключиться к Sqlserver2008 с помощью SMO, нужно ли делать обходной путь?

Я написал это для поиска экземпляров сервера 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)
  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.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(Boolean inServer) в Microsoft.SqlServer.Management.Smo.SqlSmoObject.InitializeStringComparer() в Microsoft.SqlServer .Management.Smo.AbstractCollectionBase.get_StringComparer() в Microsoft.SqlServer.Management.Smo.SimpleObjectCollectionBase. InitInnerCollection() в Microsoft.SqlServer.Management.Smo.SmoCollectionBase.get_InternalStorage() в Microsoft.SqlServer.Management.Smo.SmoCollectionBase.InitializeChildCollection (логическое обновление) в Microsoft.SqlServer.Management.Smo.SmoCollectionBase.GetEnumerator() в ConsoleApplication3.Program.Main(String[] args) в C:\Documents and Settings\Administrator.APP\Desktop\ConsoleApplication3\Program.cs:строка 25

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


person Cute    schedule 16.07.2009    source источник


Ответы (1)


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

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

  2. Удалите ссылки на библиотеки DLL SDK SLQ 2005 и повторно ссылайтесь на библиотеки SK DLL SQL 2008. (http://msdn.microsoft.com/en-us/library/ms162129.aspx)

  3. Восстановить.

Также см.: Приложению не удается найти Microsoft.SQLServer.SMO на машине SQL 2008

person Ganesh R.    schedule 16.07.2009
comment
Нет, он написан исключительно для sql2008. - person Cute; 16.07.2009
comment
Раньше DMO использовался для обнаружения sql2k8. Я использовал SMo, но он показывает вышеуказанные проблемы. - person Cute; 16.07.2009
comment
попробуйте запустить DataTable dt = SmoApplication.EnumAvailableSqlServers(true) дважды. Причина. Компьютер, на котором запущен экземпляр SQL Server, может не получать ответы на метод EnumAvailableSqlServers своевременно. Возвращенный список может не отображать все доступные экземпляры SQL Server в сети. При вызове метода EnumAvailableSqlServers в последующих попытках в сети могут стать видны дополнительные серверы. Этот метод не может перечислить локальный экземпляр, если на сервере работает брандмауэр. Брандмауэр блокирует любой широковещательный трафик, - person Ganesh R.; 16.07.2009
comment
(я делаю экземпляр sql2k8 по умолчанию. И отображается именованный экземпляр sql2k8)? Я не понимал. Вы должны указать, нужно ли вам устанавливать SQL Server с экземпляром по умолчанию во время установки. Я не думаю, что вы можете сделать это на лету. - person Ganesh R.; 16.07.2009
comment
Мой вопрос был установлен ли ваш экземпляр по умолчанию ?? Вы будете уверены, если увидите SQL Server (MSSQLSERVER) в services.msc. В противном случае у вас не установлен экземпляр SQL по умолчанию. - person Ganesh R.; 16.07.2009
comment
Да Экземпляр Mydefault установлен. - person Cute; 17.07.2009