【问题标题】:SMO.Transfer: cannot convert type "database" to type "database"SMO.Transfer:无法将类型“数据库”转换为类型“数据库”
【发布时间】:2013-11-25 14:54:55
【问题描述】:

这是一个powershell脚本:

[string] $server   = "devserver\mssql";          # SQL Server Instance
[string] $database = "ftg";      # Database with the tables to script out.
[string] $folder   = "d:\FT\FTProject\";          # Path to export to
[string] $SQLLogin = "Sa";
[string] $SQLPass  = "Sa1234";

# Reference to SMO
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO');

Write-Output ((Get-Date -format yyyy-MM-dd_HH-mm-ss) + ": Started ...");

$con = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($server, $SQLLogin, $SQLPass);
$srv = New-Object Microsoft.SqlServer.Management.SMO.Server($con);
$db = New-Object Microsoft.SqlServer.Management.SMO.Database($srv, $database);


#Use SMO Transfer Class by specifying source database
#you can specify properties you want either brought over or excluded, when the copy happens
$ObjTransfer   = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Transfer;
$ObjTransfer.Database = $db

最后一行出现错误:

异常设置“数据库”:“无法将类型“Microsoft.SqlServer.Management.Smo.Database”的“[ftg]”值转换为类型“Microsoft.SqlServer.Managem” ent.Smo.Database”。 在 D:\FT\FTProject\Setup\transfer.ps1:31 char:1 + $ObjTransfer.Database = [Microsoft.SqlServer.Management.SMO.Database] $db + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : 未指定: (:) [], SetValueInvocationException + FullyQualifiedErrorId : ExceptionWhenSetting

我也尝试如下设置 $db:

$db = $srv.Databases[$database]

怎么了?

【问题讨论】:

    标签: sql-server powershell smo server.transfer


    【解决方案1】:

    尝试以下方法:

    $db = $srv.Databases[$database]
    ...
    $ObjTransfer = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Transfer -ArgumentList $db
    

    这应该使用$db 作为源数据库创建传输对象。

    参见MSDN: Transferring Schema and Data from One Database to Another in PowerShell的示例

    【讨论】:

    • 这也不起作用。发生错误:New-Object:找不到“Transfer”的重载和参数计数:“1”。在 D:\FT\FTProject\Setup\transfer.ps1:25 char:18 + $ObjTransfer = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Transfe ... + ~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [New-Object], MethodException + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands。我还从您的链接中尝试了一个示例 - 发生同样的错误。
    【解决方案2】:

    我认为是因为加载了不同版本的 Microsoft.SqlServer.Smo.dll 和 Microsoft.SqlServer.SmoExtended.dll。

    当我在 10 版本中加载第一个程序集并在 12 版本中加载另一个程序集时,我遇到了同样的错误。

    当我在同一个版本中明确加载它们时,一切正常。

    Add-Type -path "C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.Smo\12.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.Smo.dll"
    
    Add-Type -path "C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.SmoExtended\12.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.SmoExtended.dll"
    

    【讨论】:

    • 感谢您的回答!不幸的是我无法测试这个解决方案))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多