大数据快速的上传SQL数据库

大家好!今天分享测试小程序,感兴趣的可以看看。

我现在有104万条数据,需要添加到数据库中,我想问问大家,应该怎么插入?需要多长时间?

按我之前的做法,一条一条添加不就行了!但是时间呢需要多少?估计要1个小时以上,这个主要是说明一条一条添加大数据太慢了。

那么下面看看我的测试小程序:

首先数据库

--***************指向当前要使用的数据库
use master
go
----判断当前数据库是否存在 
if exists (select * from sysdatabases where name='test')
drop database test --删除数据库
go
--创建数据库
create database test
on primary
(
	--数据库文件的逻辑名
    name='test_data',
    --数据库物理文件名(绝对路径)
    filename='D:\DB\test_data.mdf',
    --数据库文件初始大小
    size=2048MB,
    --数据文件增长量
    filegrowth=512MB
)
--创建日志文件
log on
(
    name='test_log',
    filename='D:\DB\test_log.ldf',
    size=2048MB,
    filegrowth=512MB
)
go
--*****管理表*******指向当前要使用的数据库
use test
go
--创建表
if exists(select * from sysobjects where name='TableB')
drop table TableB
go
create table TableB
(	
     value1 varchar(50) not null,  --   一个值
     value2 varchar(50) not null,  --   一个值
)
go
----添加测试数据
insert into TableB(value1,value2)values('funiyi_01','funiyi_11')
insert into TableB(value1,value2)values('funiyi_21','funiyi_21')

------查询表里面的数据
select * from TableB  
go

 

这个是程序的主页面:

大数据快速的上传SQL数据库

 

 

 大数据快速的上传SQL数据库

 

部分C#程序代码展示:

        /// <summary>
        /// txt文件生成
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_txt_Click(object sender, EventArgs e)
        {
            dataNum = 720000;
            System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
            timer.Start();
            StringBuilder sb = new StringBuilder();
            try
            {
                for (int i = 0; i < dataNum; i++)
                {
                    sb.Append(i.ToString() + ',' + i.ToString() + '\n');  //数据列用逗号分割,数据行用换行符分割
                }
                //new一个有全路径的 流写入对象,
                StreamWriter streamWriter = new StreamWriter(Application.StartupPath + $"\\{dataNum}.txt", false);
                streamWriter.Write(sb);   //把文本字符串,通过流的方式写入 txt中
                streamWriter.Close();     //关闭流写入对象
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                sb = null;
                GC.Collect();
            }
            timer.Stop();
            this.label2.Text = $"txt添加{dataNum}条数据时间:" + timer.ElapsedMilliseconds.ToString() + "ms";
        }

 

      /// <summary>
        /// txt BulkInsert   
        /// txt文件大数据 保存SQL数据库
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void S_Click(object sender, EventArgs e)
        {
            dataNum =720000;
            System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
            timer.Start();
            //****************************数据表+++++++文件路径 ++++++++++++++++++++++++++++++++++++++++ 字段终止符 ++++++++++++行终止符 +++++++++++ 批量大小
            string sqlBI = "BULK INSERT TableB FROM '" + Application.StartupPath + "\\" + dataNum + ".txt' WITH (FIELDTERMINATOR = ',',ROWTERMINATOR='\n',BATCHSIZE =720000)";
            int iNum = SQLHelperAdvance.ExecuteNonQuery(sqlBI); //传送720000,iNum=1440000;
            timer.Stop();
            this.label2.Text = $"txt SQL添加{dataNum}条数据时间:" + timer.ElapsedMilliseconds.ToString() + "ms";
        }

 

        /// <summary>
        /// 基本 Insert Into
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void bt_InsertInto_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
            timer.Start();
            sql = GetSql();
            int iNum = SQLHelperAdvance.ExecuteNonQuery(sql);
            timer.Stop();
            this.label2.Text = $"SQL添加{dataNum}条数据时间:" + timer.ElapsedMilliseconds.ToString() + "ms";
        }
        /// <summary>
        /// 获取SQL执行字符串
        /// </summary>
        /// <returns></returns>
        private string GetSql()
        {
            dataNum = 140000;
            sb = new StringBuilder();
            try
            {
                for (int i = 0; i < dataNum; i++)
                {
                    sb.Append("insert into TableB(value1,value2) values('" + i + "','" + i + "')");
                }
                return sb.ToString();
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                sb = null;
                GC.Collect();
            }
        }

 

        /// <summary>
        /// 搜寻txt
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lab_search_Click(object sender, EventArgs e)
        {
            string[] files = Directory.GetFiles(Application.StartupPath, "*.TXT"); //文件全路径列表
            
            textBox1.Text = "找到txt文件:" + files.Length +"\r\n";

            foreach (string file in files)
            {
                textBox1.Text += Path.GetFileName(file) + "\r\n";
                //new DirectoryInfo(@"c:\1").GetFiles("*.txt").ToList().ForEach(fi => fi.MoveTo(@"c:\2\" + fi.Name));  //移动文件
                //++++++++++++++获取指定路径下的 txt文件全路径,转List,++++++++ List中的每个元素执行操作,把每个txt文件,剪切到另一个文件夹中
                new DirectoryInfo(Application.StartupPath).GetFiles("*.txt").ToList().ForEach(fi => fi.MoveTo("D:\\data\\" + fi.Name));
            }
        }

        private void btn_txtDe_Click(object sender, EventArgs e)
        {
            string path = Environment.CurrentDirectory;
            string pattern = "*.txt";
            string[] strFileName = Directory.GetFiles(path, pattern);
            foreach (var item in strFileName)
            {
                File.Delete(item);
            }
        }

 

        private ExcelReport report;
        /// <summary>
        /// 直接创建,不需要模板
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_ExcelSheetNew_Click(object sender, EventArgs e)
        {
            report = new ExcelReport();
            //report.CreateWorksheet(01.ToString());
            for (int i = 20; i >= 1; i--)
            {
                report.CreateWorksheet("段号" + i.ToString());   //注意:最后创建的表索引是1,老的表索引依次加大
            }
           
            report.Show();   //显示对象
            report.ChangeCurrentWorkSheet(1); //改变当前的工作表,如果选择的表不存在,就使用之前的
            report.WriteTextToReport(1, 1, "funiyi816+1");
            report.ChangeCurrentWorkSheet(2); //改变当前的工作表,如果选择的表不存在,就使用之前的
            report.WriteTextToReport(1, 1, "funiyi816+2");
            report.SaveAs(Application.StartupPath + "\\001", ExcelSaveFormat.xlsx);
            report.Close();     //关闭对象
        }

 

        /// <summary>
        /// 通过模板打开 单个表格
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_ExcelSingleSheet_Click(object sender, EventArgs e)
        {
            dataNum = 720000;  //(新版本2007之后)最大行1048576,XFD     (老版本97-2003)最大行65536,IV

            List<TableB> tableBList = new List<TableB>();
            for (int i = 0; i < dataNum; i++)
            {
                tableBList.Add(new TableB() { Value1 = i.ToString(), Value2 = i.ToString() });
            }

            System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
            timer.Start();
            report = new ExcelReport(Application.StartupPath + "\\Template\\Template.xlsx");  //创建对象
            report.ChangeCurrentWorkSheet(1); //改变当前的工作表,如果选择的表不存在,就使用之前的
            report.Show();   //显示对象
            report.WriteListToReport(2, 1, tableBList, true);
            report.SaveAs(Application.StartupPath + $"\\{dataNum}", ExcelSaveFormat.xlsx);   //保存文件
            report.Close();     //关闭对象
            timer.Stop();
            this.label2.Text = $"EXCEL添加{dataNum}条数据时间:" + timer.ElapsedMilliseconds.ToString() + "ms";
        }

 

        /// <summary>
        /// 多个表格
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_ExcelMultipleSheet_Click(object sender, EventArgs e)
        {
            dataNum = 720000;  //(新版本2007之后)最大行1048576,XFD     (老版本97-2003)最大行65536,IV

            List<TableB> tableBList = new List<TableB>();
            for (int i = 0; i < dataNum; i++)
            {
                tableBList.Add(new TableB() { Value1 = i.ToString(), Value2 = i.ToString() });
            }

            System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
            timer.Start();
            //string str = Application.StartupPath + "\\Template\\Template.xlsx";
            report = new ExcelReport(Application.StartupPath + "\\Template\\Template.xlsx");  //创建对象

            report.ChangeCurrentWorkSheet(1); //改变当前的工作表
            report.Show();   //显示对象
            report.WriteListToReport(2, 1, tableBList, true);

            report.ChangeCurrentWorkSheet(2); //改变当前的工作表
            report.WriteListToReport(2, 1, tableBList, true);

            report.ChangeCurrentWorkSheet(3); //改变当前的工作表
            report.WriteListToReport(2, 1, tableBList, true);


            report.SaveAs(Application.StartupPath + $"\\{dataNum}", ExcelSaveFormat.xlsx);   //保存文件
            report.Close();     //关闭对象
            timer.Stop();
            this.label2.Text = $"EXCEL添加{dataNum}条数据时间:" + timer.ElapsedMilliseconds.ToString() + "ms";
        }

 

 好的,就分享到这来吧,又要上班了。欢迎大家进入我们的群一起交流,学习

大数据快速的上传SQL数据库

 

上一篇:Jacoco代码覆盖率工具


下一篇:C#调用FastReport报表打印时的传参形式