欢迎光临
我们一直在努力

使用ADO.NET下的SqlBulkCopy类执行批量复制操作-.NET教程,数据库应用

建站超值云服务器,限时71元/月

很多时侯,我们需要在数据库间复制大量数据,如sqlserver提供的bcp.exe命令行工具,在ado.net下sqlbulkcopy类提供了一个高性能的方法writetoserver来复制数据。该方法可以接受一个datarow对像数据、一个实现idbdatareader接口的对像和一个datatable,或者接受一个datatable对像和一个datarowstate枚举值,以实现从大多数位置中获取数据。

        /// <summary>
        /// 在目标数据库与源数据库之间批量复制数据
        /// </summary>
        /// <param name=”sourceconnectionstr”>源数据库连接字符串</param>
        /// <param name=”targetconnectionstr”>目标数据库连接字符串</param>
        /// <param name=”sourcesqlstr”>查询数据的sql语句,必须包含主键,否则更新不成功,并无错误提示</param>
        /// <param name=”targettablename”>更新目标数据库中的表名</param>
        /// <returns>boolean</returns>
        public static boolean dbtodb(string sourceconnectionstr,
        string targetconnectionstr, string sourcesqlstr,
        string targettablename)
        {
            system.data.sqlclient.sqlconnection sourceconn= new  system.data.sqlclient.sqlconnection();
            system.data.sqlclient.sqlconnection targetconn = new system.data.sqlclient.sqlconnection();
            try
            {
                sourceconn.connectionstring = sourceconnectionstr;
                targetconn.connectionstring = targetconnectionstr;
                system.data.sqlclient.sqlcommand cmd = sourceconn.createcommand();
                cmd.commandtype = commandtype.text;
                cmd.commandtext = sourcesqlstr;

                sourceconn.open();
                targetconn.open();

                using (system.data.sqlclient.sqldatareader rdr = cmd.executereader())
                {
                    //messagebox.show (rdr.hasrows.tostring()) ;
                    if (!rdr.hasrows)
                    {
                        return false;
                    }
                    using (system.data.sqlclient.sqlbulkcopy bc = new system.data.sqlclient.sqlbulkcopy(targetconn))
                    {
                        //超时之前操作所允许完成的秒数
                        bc.bulkcopytimeout = 360;
                        //目标服务器上的表名
                        bc.destinationtablename = targettablename;
                        bc.writetoserver(rdr);                       
                    }
                }
            }
            catch
            {
                throw;
            }
            finally
            {

                //关闭连接
                sourceconn.close();
                targetconn.close();
            }

            return true;

}

如果想以最少资源获取最佳性能,就考滤使用idbdatereader参数。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 使用ADO.NET下的SqlBulkCopy类执行批量复制操作-.NET教程,数据库应用
分享到: 更多 (0)