首先,要在A和B数据库中创建两个同名同结构的表,其中B数据库的表为目标表.
复制语句如下:
SqlConnection ConectionFrom = new SqlConnection("Data Source=192.168.1.59;Initial Catalog=A;uid=dev;pwd=dev");//数据库连接语句,看情况自己改 string sqlfrom = "SELECT * FROM FLFTD_NFLOutLine";//查表语句,看情况自己改 SqlDataAdapter adfrom = new SqlDataAdapter(sqlfrom, ConectionFrom); DataTable dtfrom = new DataTable(); adfrom.Fill(dtfrom);
SqlConnection ConectionTo = new SqlConnection("Data Source=192.168.1.59;Initial Catalog=B;uid=dev;pwd=dev");//数据库连接语句,看情况自己改
string sqlto = "SELECT * FROM FLFTD_NFLOutLine"; //查表语句,看情况自己改 SqlDataAdapter adto = new SqlDataAdapter(sqlto, ConectionTo); DataTable dtto = new DataTable(); adto.Fill(dtto);//填结构 // dtto = dtfrom.Copy();//不好用 //dtto.Merge(dtfrom);//不好用 for (int i = 0; i < dtfrom.Rows.Count; i++) { DataRow dr = dtto.NewRow();//根据datatable结构新建行 for (int j = 0; j < dtfrom.Columns.Count; j++) { dr[j] = dtfrom.Rows[i][j];//复制 } dtto.Rows.Add(dr);//添加该行 } SqlCommandBuilder cb = new SqlCommandBuilder(adto); adto.Update(dtto);//可以理解为把内存中的ds值写入数据库用
具体思想非常简单,就是用不同的adapter绑定2个不同DataTable,从一个DataTable拷贝到另一个DataTable.但是问题在于使用DataTable的Copy和Merge方法都无效,虽然在内存中可以看到dtto表已赋值,但是执行Update方法之后,数据库仍未改变.我怀疑是Copy方法返回一个新的DataTable引用覆盖了原来和adapter绑定的表相关联的引用.
所以必须一个一个的赋值^_^.......
|