-->

需要帮助的Microsoft.SqlServer.Management.Smo转让类连接(Need

2019-09-03 00:02发布

我试图复制一切(数据,索引,触发器,存储过程)。 从一个数据库到另一个在C#。

这里是我的代码:

SqlConnection connection = new SqlConnection(ConnectionString);

Server myServer = new Server(new ServerConnection(connection));               

Database db = myServer.Databases[this._myDB];

if (myServer.Databases[this._newDB] != null)
   myServer.Databases[this._newDB].Drop();

Database newdb = new Database(myServer, this._newDB);
newdb.Create();

Transfer transfer = new Transfer(db);
transfer.CopyAllSchemas = false;
transfer.CopyAllStoredProcedures = true;
transfer.CopyAllTables = true;
transfer.CopyAllDatabaseTriggers = true;
transfer.CopyAllObjects = true;
transfer.CopyAllUsers = true;
transfer.Options.WithDependencies = true;
transfer.DestinationDatabase = newdb.Name;
transfer.DestinationServer = myServer.Name;
transfer.DestinationLoginSecure = false;
transfer.DestinationLogin = user;
transfer.DestinationPassword = pwd;
transfer.CopySchema = false;
transfer.CopyData = true;
transfer.Options.DriAll = true;
transfer.Options.Triggers = true;
transfer.Options.WithDependencies = true;
transfer.Options.ContinueScriptingOnError = true;

transfer.TransferData();

我得到以下错误:

错误码= -1071636471描述= SSIS错误代码DTS_E_OLEDBERROR。 出现了一个OLE DB错误。 错误代码:0x80004005的。
一个OLE DB记录。 来源: “Microsoft SQL Server本机客户端10.0” HRESULT:0x80004005说明: “登录失败,用户 '域\用户'。”
一个OLE DB记录。 来源:“Microsoft SQL Server本机客户端10.0” HRESULT:0x80004005说明:“无法打开数据库‘MYDB(更换名字,但它是正确的)。’由登录请求的登录失败。”
HELPFILE = helpContext = 0 idofInterfaceWithError = {5BC870EB-BBA5-4B9D-A6E3-58C6D0051F14}

我是来用的解决方法实现它最接近的是这样做的:

script = transfer.ScriptTransfer();

foreach (string s in script)
{
     //run a sqlcommand for s
}

但是,这并没有得到数据。

我已经给了用户,我可以为SQL Server和数据库本身认为两者的每一个许可。

Answer 1:

为时已晚,但它可以帮助身体有些意外,

我有同样的问题,它是由于第一线,投给SqlConnection 。 它激活的混合身份验证[这就是为什么你得到一个错误的登录是错误的'域\用户]

我选择使用初始化一个简单的连接SqlConnectionStringBuilder

var connectionString = ((EntityConnection)base.ReferentielContext.Connection).StoreConnection.ConnectionString;
var builder = new SqlConnectionStringBuilder(connectionString);

var srvConn = new ServerConnection
        {
            ServerInstance = builder.DataSource,
            LoginSecure = false,// set to true for Windows Authentication
            Login = builder.UserID,
            Password = builder.Password
        };

var server = new Microsoft.SqlServer.Management.Smo.Server(srvConn);


文章来源: Need help connection with Microsoft.SqlServer.Management.Smo Transfer class