【问题标题】:Need help connection with Microsoft.SqlServer.Management.Smo Transfer class需要帮助连接 Microsoft.SqlServer.Management.Smo 传输类
【发布时间】:2013-05-13 19:57:58
【问题描述】:

我正在尝试复制所有内容(数据、索引、触发器、存储过程)。在 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();

我收到以下错误:

errorCode=-1071636471 description=SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。
OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 10.0”Hresult:0x80004005 描述:“用户 'DOMAIN\user' 登录失败。”。
OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 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 和数据库本身,我已经向用户授予了我能想到的所有权限。

【问题讨论】:

    标签: c# sql sql-server smo


    【解决方案1】:

    为时已晚,但它可以帮助其他人,

    我遇到了同样的问题,这是由于第一行,SqlConnection 的演员表。它激活了混合身份验证 [这就是为什么您收到错误,因为您的 'DOMAIN\user' 的登录名是错误的]

    我选择使用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);
    

    【讨论】:

    • 谢谢!这正是我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 2017-08-08
    相关资源
    最近更新 更多