2009-05-19 5 views
0

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.

+0

C#에서이 클래스를 테스트 해 보셨습니까? 그것은 .net 2.0 exe에서 호출 할 때 작동합니까? 또한, 그것은 어디에서 실패합니까? EnumAvailableSqlServers에 대한 호출에서? –

+0

예. 제대로 작동합니다. i hav는 com.i가 smae vs2005에서이 클래스를 다른 클래스에 사용했을 때 작성했습니다. exe를 얻으십시오. vs2003 컴퓨터에서 EXE를 실행하면 런타임이 필요하고 닫히는 것으로 나타납니다. – Cute

답변

0

예, .net 2 런타임을 설치 한 경우 VS2003 COM interop이 정상적으로 작동해야합니다.

문제가 있습니까? 만약 그렇다면 당신이 겪고있는 문제를 우리에게 말해 줄 수 있습니까?

+0

Comssss.exe의 0x7c812a6b에서 처리되지 않은 예외가 발생합니다. Microsoft C++ 예외 : _com_error @ 0x0012fcbc. 이것은 예외입니다. – Cute

0

두 버전의 프레임 워크를 같은 프로세스에로드 할 수 없습니다. VS2003은 이미 .NET 1.1을 사용하고 있으므로 .NET 2.0이 필요한 in-proc COM 구성 요소를로드 할 수 없습니다.

DCOM을 사용할 수 있고 out-proc 할 수 있습니다.

관련 문제