当前位置:编程学习 > C#/ASP.NET >>

数据库导入txt文件

需要将一台服务器的700W数据导入到另一个服务器中

现在先将700W的数据导入txt文件,然后再把这些txt文件放入到另一个服务器中进行导入

以下是导入txt代码


 private void DataToText()
        {
            while (true)
            {
                try
                {
                    DataTable dt = daColl.GetTopOne();//获取数据库一行数据
                    int id = Convert.ToInt32(dt.Rows[0]["id"]);
                    if (dt != null && dt.Rows.Count != 0)
                    {
                        string day = dt.Rows[0]["create_day"].ToString();
                        string time = dt.Rows[0]["create_time"].ToString();
                        StringBuilder strContent = new StringBuilder();
                        strContent.Append(dt.Rows[0]["ip"].ToString() + "," + dt.Rows[0]["create_day"].ToString() + "," + dt.Rows[0]["create_time"].ToString() + ",");
                        strContent.Append(dt.Rows[0]["pages_id"].ToString() + "," + dt.Rows[0]["page_state"].ToString() + "," + dt.Rows[0]["projects_id"].ToString() + "," + dt.Rows[0]["medias_id"].ToString() + ",");
                        strContent.Append(dt.Rows[0]["ads_id"].ToString() + "," + dt.Rows[0]["pv"].ToString() + "," + dt.Rows[0]["uv"].ToString() + ",");
                        strContent.Append(dt.Rows[0]["city"].ToString() + "," + dt.Rows[0]["browser"].ToString() + "," + dt.Rows[0]["use_type"].ToString() + "," + dt.Rows[0]["use_system"].ToString()+"|");

                        #region 数据导入txt文件

                        if (Directory.Exists(day))
                        {
                            if (File.Exists(day + "/" + time + ".txt"))
                            { //存在文件,写入该文件内
                                CreateFile(day, time, strContent.ToString(), 2, id);
                            }
                            else
                            {
                                //创建文件并写入
                                CreateFile(day, time, strContent.ToString(), 1, id);
                            }
                        }
                        else
                        { //不存在,创建文件夹,在文件夹中创建ids.txt
                            Directory.CreateDirectory(day);
                            CreateFile(day, time, strContent.ToString(), 1, id);
                        }
                        #endregion
                    }
                    else
                    {
                        break;
                    }
                    dt.Dispose();
                }
                catch (Exception ex)
                {
                    txtWrite(ex, "读取第一行数据错误");
                }

            }
            thread.Abort();//结束线程
        }



 /// <summary>
        /// 数据写入文件
        /// </summary>
        /// <param name="day">文件夹名称</param>
        /// <param name="name">txt文件的名称</param>
        /// <param name="content">内容</param>
        /// <param name="type">写入的方式,1:创建名称文件并写入 2:写入文件名称的文件</param>
        private void CreateFile(string day, string name, string content, int type, int id)
        {
            try
            {
                FileStream fs = null;
                string url = day + "/" + name + ".txt";
                if (type == 1)
                {
                    fs = new FileStream(url, FileMode.Create);
                }
                else
                {
                    fs = new FileStream(url, FileMode.Append);
                }

                StreamWriter sw = new StreamWriter(fs);
                sw.WriteLine(content);
                sw.Close();
                sw.Dispose();
                fs.Close();
                fs.Dispose();
                lblReadRow.Invoke(new myDelegate(AddreaderRow));
            }
            catch (Exception ex)
            {
                txtWrite(ex, "数据写入文件错误");
            }

            try
            {
                daColl.UpdateData(id);

            }
            catch (Exception ex)
            {
                txtWrite(ex, "更新数据库错误");
            }

        }



用的Winform做的,在开始按钮那弄了一个线程


thread = new Thread(new ThreadStart(DataToText));
thread.Start();


这些代码刚开始运行的时候还挺快的,但是时间越长之后导入的速度越慢,不知道是什么问题?
求大神指导 --------------------编程问答-------------------- 你这是每读一条打开一次文件,写一行文本啊。
为什么不一次打开文件,全部写入后再关闭文件,这样效率肯定很低啊。 --------------------编程问答--------------------
引用 1 楼 aley 的回复:
你这是每读一条打开一次文件,写一行文本啊。
为什么不一次打开文件,全部写入后再关闭文件,这样效率肯定很低啊。


因为我不能保证那一行数据就是这个txt文件的数据 

数据库有一列为时间,格式为:23
就是小时的整数点
一行数据是23的会保存在23.txt文件中
下一行数据是22的 会保存在22.txt文件中
所以这个方法不可行 --------------------编程问答-------------------- SqlBulkCopy

参考 --------------------编程问答--------------------
引用 3 楼 dr592112441 的回复:
SqlBulkCopy

参考


我是从数据库导入到txt文件中,谢谢!
--------------------编程问答-------------------- 用的着这么麻烦,数据库不是都直接有导入导出数据功能吗 --------------------编程问答-------------------- 你整个xml文件也比用txt文件好用吧。
都保存到一个文件里。根据你说的规则区分,,
效率要高很多吧。
<datas>
    <你用来区分的时间1>
       <data></data>
       <data></data>
.
.
.
.
.
    </你用来区分的时间1>
    <你用来区分的时间2>
       <data></data>
       <data></data>
    </你用来区分的时间2>
.
.
.
.
</datas>
这格式的不挺好的吗?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,