数据库导入txt文件

ad6619520 2013-03-25 01:32:12
需要将一台服务器的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();


这些代码刚开始运行的时候还挺快的,但是时间越长之后导入的速度越慢,不知道是什么问题?
求大神指导
...全文
121 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你整个xml文件也比用txt文件好用吧。 都保存到一个文件里。根据你说的规则区分,, 效率要高很多吧。 <datas> <你用来区分的时间1> <data></data> <data></data> . . . . . </你用来区分的时间1> <你用来区分的时间2> <data></data> <data></data> </你用来区分的时间2> . . . . </datas> 这格式的不挺好的吗?
  • 打赏
  • 举报
回复
用的着这么麻烦,数据库不是都直接有导入导出数据功能吗
ad6619520 2013-03-25
  • 打赏
  • 举报
回复
引用 3 楼 dr592112441 的回复:
SqlBulkCopy 参考
我是从数据库导入到txt文件中,谢谢!
Mirror然 2013-03-25
  • 打赏
  • 举报
回复
SqlBulkCopy 参考
ad6619520 2013-03-25
  • 打赏
  • 举报
回复
引用 1 楼 aley 的回复:
你这是每读一条打开一次文件,写一行文本啊。 为什么不一次打开文件,全部写入后再关闭文件,这样效率肯定很低啊。
因为我不能保证那一行数据就是这个txt文件的数据 数据库有一列为时间,格式为:23 就是小时的整数点 一行数据是23的会保存在23.txt文件中 下一行数据是22的 会保存在22.txt文件中 所以这个方法不可行
我是老姚 2013-03-25
  • 打赏
  • 举报
回复
你这是每读一条打开一次文件,写一行文本啊。 为什么不一次打开文件,全部写入后再关闭文件,这样效率肯定很低啊。

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧