VS2005에서 SMo 네임 스페이스를 사용하여 SQLVolume을 검색 할 수있는 com 라이브러리를 만들었습니다. 이제 VS2003에서이 com 라이브러리를 사용하여 vs2003이 설치된 다른 컴퓨터에서 동일한 sqlvolume을 검색하려고합니다.SQLSERVERSMO 용 com 라이브러리를 사용하는 방법은 무엇입니까?
이렇게 쓸 수 있습니까? 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에서
처리되지 않은 예외 : 마이크로 소프트 C++ 예외 : @ 0x0012fcbc _com_error.
C#에서이 클래스를 테스트 해 보셨습니까? 그것은 .net 2.0 exe에서 호출 할 때 작동합니까? 또한, 그것은 어디에서 실패합니까? EnumAvailableSqlServers에 대한 호출에서? –
예. 제대로 작동합니다. i hav는 com.i가 smae vs2005에서이 클래스를 다른 클래스에 사용했을 때 작성했습니다. exe를 얻으십시오. vs2003 컴퓨터에서 EXE를 실행하면 런타임이 필요하고 닫히는 것으로 나타납니다. – Cute