2

すべて (データ、インデックス、トリガー、ストアド プロシージャ) をコピーしようとしています。C# で 1 つのデータベースから別のデータベースへ。

これが私のコードです:

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 とデータベース自体の両方に対して考えられるすべての権限をユーザーに付与しました。

4

1 に答える 1

4

手遅れですが、他の体を助けることができます。

私は同じ問題を抱えていましたが、それは最初の行である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);
于 2013-07-16T12:08:43.300 に答える