有一个应用,是需要将oracle中的表A同步到sqlserver中的表B(说明表B是一个空表,每次开始此操作前将truncate table B)
表A与表B的结构一样,只是字段名称不一样
现在想通过dataset的insert功能来实现
首先将oracle中表A的数据放入dataset中,再从dataset一次性update到sqlserver请问哪位有现成的程序代码,提供一下参考,谢谢

解决方案 »

  1.   

    SqlBulkCopy 类
    MSDN上的实例执行单词批量复制
    SqlConnection connection = New SqlConnection(connectionString);
    string queryString =  "BULK INSERT Northwind.dbo.[Order Details] " +
        "FROM 'f:\mydata\data.tbl' " +
        "WITH ( FORMATFILE='f:\mydata\data.fmt' )";
    connection.Open();
    SqlCommand command = new SqlCommand(queryString, connection);command.ExecuteNonQuery();
    connection.Close();
      

  2.   

    按你目前的方案,最好用适配器,调用适配器的UPDAUE方法就OK了.相关的代码你查一下MSDN,里面写的非常清楚.1.建立一个SQL 适配器
    2.定义适配器的数据库联拉和COMMAND
    3.定义适配器的INSERTCOMMAND和SQL语句,特别是参数
    4.关闭对象与连接.
      

  3.   

    System.Data.SqlClient.SqlBulkCopy 类
    使您可以用其他源的数据有效批量加载 SQL Server 表。语法
    public sealed class SqlBulkCopy : IDisposable备注
    Microsoft SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表既可以在同一个服务器上,也可以在不同服务器上)。SqlBulkCopy 类允许编写提供类似功能的托管代码解决方案。还有其他将数据加载到 SQL Server 表的方法(例如 INSERT 语句),但相比之下 SqlBulkCopy 提供明显的性能优势。使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据。
      

  4.   

    下面是思路,及操作MSSQL的代码: //打开oracle,把表数据填充到dataSet
                DataSet ds1;            //设置dataSet1中所有的行状态,都为Added状态,这点很重要
                foreach (DataRow row in ds1.Tables[0].Rows)
                {
                    row.SetAdded();
                }
                //创建连接Sql Server的Conncetion和Adapter
                SqlConnection conn = new SqlConnection(strConn);
                conn.Open();
                SqlDataAdapter adp = new SqlDataAdapter();            //创建一个往MSSQL里插入数据的Command,并赋给Adapter
                SqlCommand cmd1 = new SqlCommand("Insert into tblEntity(Entity_Id,Entity_Name) Values(@Entity_Id,@Entity_Name)", conn);
                adp.InsertCommand = cmd1;            //设置Insert命令的参数与相应的字段,如下:@Entity_Id是参数,Entity_Id是DataSet中的字段名
                adp.InsertCommand.Parameters.Add("@Entity_Id", SqlDbType.Char, 10, "Entity_Id");
                adp.InsertCommand.Parameters.Add("@Entity_Name", SqlDbType.VarChar, 50, "Entity_Name");            //执行UPDATE,更新数据
                adp.Update(ds1);
                MessageBox.Show("添加完成");
      

  5.   

    to:ydsunny 小强 
    很合理,但是我用的是vs2003
    好像没有row.SetAdded();
      

  6.   

    楼主,若一定要用Adapter.Update(),有个变通的方法,新建一个结构一样的DataSet,把数据从旧的DataSet拷贝一份到新的DataSet,这样新的DataSet里的每一行的RowState就已经是Added了.然后对新的DataSet执行Adapter.Update即可.
      

  7.   

    其实也可以通过遍历DataSet的每一行,然后用SqlCommand一行一行插入MSSQL.
    你自己测试一下,速度也会很快!