sql SqlBulkCopy SqlDataAdapter 数据处理

  public class sqlclass
    {
        //复制大量数据
        public static void BulkToDB(DataTable dt, string TableName)
        {
            SqlConnection sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnstr"].ConnectionString);

            SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn);
            bulkCopy.BulkCopyTimeout = 600;
            bulkCopy.DestinationTableName = TableName;
            bulkCopy.BatchSize = dt.Rows.Count;

            try
            {
                sqlConn.Open();
                if (dt != null && dt.Rows.Count != 0)
                    bulkCopy.WriteToServer(dt);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                sqlConn.Close();
                if (bulkCopy != null)
                    bulkCopy.Close();
            }
        }


        private void btnTest_Click(object sender, EventArgs e)
        {
            // 定义与目标表的结构一致的内存表 排除自增id列
            DataTable dtSource = new DataTable();
            //列名称如果和目标表设置为一样,则后面可以不用进行字段映射
            dtSource.Columns.Add("NameS", typeof(string));
            dtSource.Columns.Add("AddressS", typeof(string));

            // 向dt中增加1W条测试数据
            DataRow dr;
            for (int i = 0; i < 100; i++)
            {
                // 创建与dt结构相同的DataRow对象
                dr = dtSource.NewRow();
                dr["NameS"] = "Name" + i;
                dr["AddressS"] = "Address" + i;

                // 将dr追加到dt中
                dtSource.Rows.Add(dr);
            }

            //将内存表dt中的1W条数据一次性插入到t_Data表中的相应列中
            //System.Diagnostics.Stopwatch st = new System.Diagnostics.Stopwatch();
            //st.Start();
            string connStr = "server=.;database=TestDB;uid=sa;pwd=123456;";
            using (System.Data.SqlClient.SqlBulkCopy copy = new System.Data.SqlClient.SqlBulkCopy(connStr))
            {
                //1 指定数据插入目标表名称
                copy.DestinationTableName = "t_Data";

                //2 告诉SqlBulkCopy对象 内存表中的 OrderNO1和Userid1插入到OrderInfos表中的哪些列中
                copy.ColumnMappings.Add("NameS", "Name");
                copy.ColumnMappings.Add("AddressS", "Address");

                //3 将内存表dt中的数据一次性批量插入到OrderInfos表中
                copy.WriteToServer(dtSource);
            }
            //st.Stop();
            //MessageBox.Show("数据插入成功,总耗时为:" + st.ElapsedMilliseconds + "毫秒");
        }



        private void button1_Click(object sender, EventArgs e)
        {
            //1.0 定义与目标表的结构一致的内存表 排除自增id列
            DataTable dtSource = new DataTable();
            //列名称如果和目标表设置为一样,则后面可以不用进行字段映射
            dtSource.Columns.Add("ID", typeof(string));
            dtSource.Columns.Add("Name", typeof(string));
            dtSource.Columns.Add("Address", typeof(string));

            //2.0 向dt中增加1W条测试数据
            DataRow dr;
            for (int i = 0; i < 100 * 100; i++)
            {
                //1.0 创建与dt结构相同的DataRow对象
                dr = dtSource.NewRow();
                dr["Name"] = "NameId" + i;
                dr["Address"] = "AddressId" + i;

                //2.0 将dr追加到dt中
                dtSource.Rows.Add(dr);
            }
            System.Diagnostics.Stopwatch st = new System.Diagnostics.Stopwatch(); //计算时间
            st.Start();
            string conn = "server=.;database=TestDB;uid=sa;pwd=123456;";     //连接数据库
            string sqlText = "select * from t_Data";          //SQL语句,用于查出符合条件的数据库数据

            //当上述工作完成之后,我们调用SqlDataAdapter的Fill()方法,将查询出来的数据表内容填充的一张DataTable里面
            SqlDataAdapter SDA = new SqlDataAdapter(sqlText, conn);
            SDA.Fill(dtSource);
            //这个SqlCommandBuilder用来自动生成添加、删除、修改的语句,注意这个参数是刚才建立的SqlDataAdapter。
            SqlCommandBuilder SCB = new SqlCommandBuilder(SDA);
            SDA.Update(dtSource);         //数据录入
            st.Stop();
           // MessageBox.Show("数据插入成功,总耗时为:" + st.ElapsedMilliseconds + "毫秒");
        }
    }

DBDataAdapter是一个抽象基类,不能被实例化,并且继承DataAdapter类,IDBDataApdater,IdataAdapter以及Icloneable接口。DataAdapter成员较多,必须掌握的有以下几种:

  • SelectComand属性:获取或设置用于在数据源选择记录的命令。

  • UpdateCommand属性:获取或这只用于更新数据源中的记录的命令。

  • DeleteCommand属性:获取或设置用于从数据源中删除记录的命令。

  • InsertCommand属性:获取或设置用于将新记录插入数据源中的命令。

  • Fill方法:填充数据集。

  • Update方法:更新数据源。


作者:繁星点点滴滴
链接:http://www.imooc.com/article/28827
来源:慕课网

 

 

 

DBDataAdapter是一个抽象基类,不能被实例化,并且继承DataAdapter类,IDBDataApdater,IdataAdapter以及Icloneable接口。DataAdapter成员较多,必须掌握的有以下几种:

  • SelectComand属性:获取或设置用于在数据源选择记录的命令。

  • UpdateCommand属性:获取或这只用于更新数据源中的记录的命令。

  • DeleteCommand属性:获取或设置用于从数据源中删除记录的命令。

  • InsertCommand属性:获取或设置用于将新记录插入数据源中的命令。

  • Fill方法:填充数据集。

  • Update方法:更新数据源。


    部分内容摘抄

posted @ 2019-09-18 16:33  芮源  阅读(205)  评论(0)    收藏  举报