我创建了一个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。
答案 0 :(得分:0)
是的,如果您安装了.net 2运行时,VS2003 COM互操作应该可以正常工作。
你有这个问题吗?如果是这样,你能告诉我们你遇到的问题吗?
答案 1 :(得分:0)
您无法将两个版本的框架加载到同一进程中。 VS2003已经在使用.NET 1.1,因此您将无法加载需要.NET 2.0的进程内COM组件。
您可以使用DCOM并将其外出。