문제

우리는 노력해서는 SQL 을 사용하여 DMO 을 SMO 에서 우리의 COM+기반의 응용 프로그램으로 우리가 낙원에 대한 SQL Server2000 년 및 지원을 추가하는 SQL Server2008 이외에 SQL Server2005.

내가 읽고 주위에,그리고 이 특정한 경구에 이 microsoft 포럼:

"SMO 에서만 지원됩 VB/C#.Net2005.이 필요합니다.Net Framework2.0,어떤에서 사용할 수 없습니다 VB/VC6."

그것은 사실입니까?인터넷 검색에서 일반 및 인터넷 검색 유래 던지지 않았고 결정적인 답변이 있습니다.

은 그것을 구현하는 것이 가능하 SQL SMO 를 사용하여 VB6?

편집:나는 사용 COM 래퍼하...나의 답변을 아래를 위한 좀 더 상세정보.

도움이 되었습니까?

해결책

좋아, 나는 이것을하는 방법을 알아 냈다.

문제는 VB6에 .NET 2.0 지원이 없으므로 VB6과 함께 SMO를 사용할 수 없다는 것입니다.

이를 해결하기 위해 C#에 COM 래퍼를 작성하여 SMO와 MAPS (대부분)를 VB 앱에서 원하는 기능과 함께 일대일로 사용했습니다.

기본적으로 C# 프로젝트를 만들고, 필요에 따라 SMO 참조를 추가하고, 클래스 선언 위의 다음 줄을 추가하여 볼 수 있도록하십시오.

comvisible (true)

Guidattribute ( "{Guid Here}")

classInterface (classInterfaceType.AutoDual)] <--- 권장되지는 않지만 잘 ...

프로젝트 속성에서 "빌드"섹션에서 "COM Interop에 대한 등록"상자가 확인되었는지 확인하십시오. VB6 앱으로 컴파일하고 가져 오면 비즈니스 중입니다 !!

두 가지 다른 시스템을 함께 망치려고하는 경우와 마찬가지로 VB6 앱과 C# 래퍼 사이에 전달하는 것과 관련하여 몇 가지 조작이있을 것입니다. 그러나 너무 어렵지는 않습니다.

더 많은 정보/세부 정보가 필요한 경우 의견을 제시하십시오.

다른 팁

지 알아의 방법으로 얻을 수 있습 SMO 를 통해 VB6.나는 것에 동의하 G Mastros 일에 대해 COM/Interop 접근 구현할 수 있습니다.NET 직접 코드.

대한 대안을 고려할 수있는 쉘을 Powershell,실행하는 스크립트를 할 것입니다.NET SMO 작동합니다.당신은 여전히 필수 필요하다.NET framework(현 분),그러나 그것을 얻을 것입니다.스크립트를 수 있는 매개변수를 증명,데이터베이스 이름,백업 유형,etc.

저는 이것을 구현에 많은 클라이언트 SQL Express 음(SQL 에이전트를 위한 백업,다음과 같 MSDE).나는 훅 예약된 작업을 호출하는 스크립트를 관리하는 그들의 백업을 수행합니다.

는 경우 도움이 된다,여기가 스크립트--크게 도 하지만 나는 수정은 그것이 다소:

param (
  [string] $ServerName,
  [string] $DatabaseName,
  [string] $Backuptype,
  [string] $BackupPath,
  [int] $NumDays
)
Get-ChildItem $BackupPath | where {$_.LastWriteTime -le (Get-Date).AddDays(-$NumDays)} | remove-item
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null
[System.IO.Directory]::CreateDirectory($BackupPath) | out-null
$srv=New-Object "Microsoft.SqlServer.Management.Smo.Server" "$servername"
$bck=new-object "Microsoft.SqlServer.Management.Smo.Backup"

if ($Backuptype -eq "FULL") 
{
$bck.Action = 'Database' 
$extenstion=".BAK" 
$text1="Full Backup"
}

if ($Backuptype -eq "TRAN") 
{
$bck.Action = 'Log' 
$bck.LogTruncation = 2
$extenstion=".TRN" 
$text1="Transactional Log Backup"
}

if ($Backuptype -eq "DIFF") 
{ 
$bck.Incremental = 1 
$extenstion=".DIFF"  
$text1="Differential Backup"
}

$fil=new-object "Microsoft.SqlServer.Management.Smo.BackupDeviceItem"
$fil.DeviceType='File'
$fil.Name=[System.IO.Path]::Combine($BackupPath, $DatabaseName+ "_"+ [DateTime]::Now.ToString("yyyy_MM_dd_HH_mm")+$extenstion)
$bck.Devices.Add($fil)
$bck.Database=$DatabaseName
$bck.SqlBackup($srv)
write-host $text1 of $Databasename done

을 할 수 있는 가득 차고,트랜잭션에 백업하고 유일하게 이름을 각 결과에 따라 파일의 날짜 및 시간,삭제 모든 파일을 특정 숫자의 일입니다.

구문을합니다:

.\Backup.ps1 INSTANCENAME DATABASENAME FULL|TRAN|DIFF PATH DAYSTOKEEP

그래서...

.\Backup.ps1 SQLEXPRESS Northwind FULL C:\TempHold\Test 30
.\Backup.ps1 SQLEXPRESS Northwind TRAN C:\TempHold\Test 30
.\Backup.ps1 SQLEXPRESS Northwind DIFF C:\TempHold\Test 30

일정 작업 스케줄러에서 전달:

powershell c:\temphold\test\backup.ps1 "SQLEXPRESS Northwind DIFF C:\TempHold\Test 30"

게시물에 감사드립니다. COM 래퍼를 사용하여 VB6의 SQLSMO를 사용하는 솔루션이 있다는 것을 이해하는 데 도움이됩니다. 자세한 단계를 따라 갔지만 솔루션은 작동하지 않습니다. 나는 기본적으로 이것을하고있다 :

using System;
using System.Collections.Generic;

system.text 사용; system.runtime.interopservices 사용; 네임 스페이스 Wrappercom {

[System.Runtime.InteropServices.ComVisible(true)]

[GuidAttribute("1d93750c-7465-4a3e-88d1-5e538afe7145")]



[ClassInterface(ClassInterfaceType.AutoDual)]
public class Class1
{
    public Class1() { }
}

}

SQLSMO에 대한 다음 참조도 추가했습니다.

• Microsoft.sqlserver.connectioninfo.dll

• Microsoft.sqlserver.smo.dll

• Microsoft.sqlserver.management.sdk.sfc.dll

• Microsoft.sqlserver.sqlenum.dll

마지막으로 .tlb 파일을 가져 와서 vb6을 실행하고 이와 같은 객체를 만들 때 - createobject ( "comwrapper.class1")가 실패합니다. "런타임 오류 ..."을 제공합니다.

pls는 내가 여기서 놓친 것이 무엇인지 조언합니다 ...

시도하지는 않았지만 SQL SMO와 상호 작용하기 위해 vb.net 코드를 작성한 다음 vb.net 코드에 대한 COM 래퍼를 작성할 수 있습니다. 물론 사용하려면 여전히 .NET 프레임 워크가 필요합니다.

대신 SQL DMO 및 SQL SMO에서 마이그레이션하는 것이 좋습니다. DMO 또는 SMO로하는 모든 일은없이 수행 할 수 있습니다. 물론 쉽지는 않지만 교체 코드에 대한 인터넷 검색 (SQL DMO 대신 직선 T-SQL 사용)은 필요한 답변을 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top