如何使用SQLSERVERSMO的com库?

时间:2009-05-19 09:34:13

标签: c# .net sql-server sql-server-2005 c++-cli

我创建了一个com库,通过它我可以在VS2005中使用SMo命名空间发现SQLVolumes。 现在我想在VS2003中使用这个com库在另一台安装了vs2003的机器上发现相同的sqlvolumes。

我可以像这样使用吗?我使用版本VS2005创建了一个COM,现在我想在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库,我必须在vs2003中使用这个com库,还有一个是smo命名空间。

.net f / w 1.1不支持上述代码。我怎么能这样做?

消费时我收到以下错误:

Comssss.exe中0x7c812a6b处的未处理异常:Microsoft C ++异常:_com_error @ 0x0012fcbc。

2 个答案:

答案 0 :(得分:0)

是的,如果您安装了.net 2运行时,VS2003 COM互操作应该可以正常工作。

你有这个问题吗?如果是这样,你能告诉我们你遇到的问题吗?

答案 1 :(得分:0)

您无法将两个版本的框架加载到同一进程中。 VS2003已经在使用.NET 1.1,因此您将无法加载需要.NET 2.0的进程内COM组件。

您可以使用DCOM并将其外出。