Как использовать библиотеки com для SQLSERVERSMO? - PullRequest
0 голосов
/ 19 мая 2009

Я создал библиотеку com, с помощью которой я могу обнаружить SQLVolumes, используя пространство имен SMo в VS2005. Теперь я хочу использовать эту библиотеку com в VS2003 для обнаружения того же sqlvolumes на другом компьютере, где установлен vs2003.

Могу ли я использовать это так? Я создал COM, используя версию VS2005, и теперь я хочу использовать его в VS2003, возможно ли это?

Я прошу вас, люди, не отмечать это как дубликат, потому что мне нужен эффективный ответ.

using System;

using System.Data.SqlClient;

using Microsoft.Win32;

using Microsoft.SqlServer.Management.Smo;

using Microsoft.SqlServer.Management.Common;

using System.Data;

public interface ICalculator

{

 void Show();

};

namespace ManagedDLL
{
    public class ManagedClass : ICalculator
    {

        public void Show()
        {

            Console.WriteLine("from managed class");
            Console.WriteLine("c# "); Console.WriteLine("c#");
            DataTable dt = new DataTable();
            string srvname,filepath; 

            //evaluates local instances of SQLSERVER
            dt = SmoApplication.EnumAvailableSqlServers(true);
            Console.WriteLine("Local Instances are \n");
            foreach (DataRow dr in dt.Rows)
                Console.WriteLine(dr["Name"]);

            foreach (DataRow dr in dt.Rows)
            {
                srvname = (string)dr["name"];

                Console.WriteLine("\nConnecting to Server " + srvname + "\n\nDiscovering Volumes...\n\nDiscovering Sql2005 Volumes for the Host " + srvname.ToLower() + "\n");
                Console.WriteLine("\nHostName   : " + srvname.ToLower() + "\n");
                Server srv = new Server(srvname);
                Console.WriteLine(" Server Name \n" + srv.Name);
                foreach( Database db in srv.Databases)
                {
                    filepath = db.PrimaryFilePath;
                    Console.WriteLine("File Path : " + filepath + "\\" + db.Name + ".mdf \n");
                    Console.WriteLine("File Path : " + filepath + "\\" + db.Name + ".ldf \n");
                }


            }//foreach


        }
    }

}

Я создал библиотеку com для этого класса, и мне нужно использовать эту библиотеку com в vs2003, и еще одна вещь - это пространство имен smo.

Приведенный выше код не поддерживается .net f / w 1.1. Как я могу это сделать?

При использовании я получаю следующую ошибку:

Необработанное исключение в 0x7c812a6b в Comssss.exe: исключение Microsoft C ++: _com_error @ 0x0012fcbc.

Ответы [ 2 ]

0 голосов
/ 30 мая 2009

Вы не можете загрузить две версии фреймворка в один и тот же процесс. VS2003 уже использует .NET 1.1, поэтому вы не сможете загрузить внутрипроцессный COM-компонент, которому требуется .NET 2.0.

Возможно, вы сможете использовать DCOM и получить его вне процесса.

0 голосов
/ 19 мая 2009

Да, если у вас установлена ​​среда выполнения .net 2, COM-взаимодействие VS2003 должно работать нормально.

У вас есть конкретные проблемы с этим? Если да, то можете ли вы рассказать нам о проблеме, с которой вы столкнулись?

...