我想将数据从数据库移动到另一个数据库。
我写了2个功能。功能1:我将数据库1中的表填充到数据表中,并命名为DT
函数2中的我用Dt填充database2中的表并命名为dtnull
我在数据库2中更新dtnull
function 2:
{
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = new SqlCommand();
sda.SelectCommand.Connection = objconn;
sda.SelectCommand.CommandText = "Select * from " + TableName + "";
DataTable dtnull = new DataTable();
sda.Fill(dtnull);
SqlCommandBuilder Builder = new SqlCommandBuilder();
Builder.DataAdapter = sda;
Builder.ConflictOption = ConflictOption.OverwriteChanges;
string insertCommandSql = Builder.GetInsertCommand(true).CommandText;
foreach (DataRow Row in Dt.Rows)
{
dtnull.ImportRow(Row);
}
sda.Fill(dtnull);
sda.Update(dtnull);
}
答案 0 :(得分:0)
如果您需要复制SQL数据库,则只需备份并恢复。或者使用DTS服务。
答案 1 :(得分:0)
如果只是几张桌子,我认为你可以
不需要让它变得更难。
答案 2 :(得分:0)
您真的不需要为此使用更新。您可以试用这个解决方案,这可能是您执行此操作的最简单方法。
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx
如果你想要一个LINQ解决方案,我可以为你提供一个。
答案 3 :(得分:0)
还有很多原因尚无法解释。例如,源表和目标表是否具有相同的列结构?
你能看到来自同一个SqlConnection的两个数据库(即它们是否在同一台机器上)?如果是这样,您可以在一个SQL语句中完成所有操作。假设您要将数据库DB1中的表T1中的数据复制到数据库DB2中的表T2,您将编写
从DB1.dbo.T1
插入DB2.dbo.T2 select *使用ExecuteNonQuery执行。
如果数据库需要不同的SqlConnections,我会使用SqlDataReader从源读取数据并逐行更新目标。我认为它比使用SqlDataAdapter和DataTable更快,因为它们需要更多的结构和内存。 Update命令在任何情况下逐行写入数据。