数据库导入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();
这些代码刚开始运行的时候还挺快的,但是时间越长之后导入的速度越慢,不知道是什么问题?
求大神指导 --------------------编程问答-------------------- 你这是每读一条打开一次文件,写一行文本啊。
为什么不一次打开文件,全部写入后再关闭文件,这样效率肯定很低啊。 --------------------编程问答--------------------
因为我不能保证那一行数据就是这个txt文件的数据
数据库有一列为时间,格式为:23
就是小时的整数点
一行数据是23的会保存在23.txt文件中
下一行数据是22的 会保存在22.txt文件中
所以这个方法不可行 --------------------编程问答-------------------- SqlBulkCopy
参考 --------------------编程问答--------------------
我是从数据库导入到txt文件中,谢谢!
--------------------编程问答-------------------- 用的着这么麻烦,数据库不是都直接有导入导出数据功能吗 --------------------编程问答-------------------- 你整个xml文件也比用txt文件好用吧。
都保存到一个文件里。根据你说的规则区分,,
效率要高很多吧。
<datas>
<你用来区分的时间1>
<data></data>
<data></data>
.
.
.
.
.
</你用来区分的时间1>
<你用来区分的时间2>
<data></data>
<data></data>
</你用来区分的时间2>
.
.
.
.
</datas>
这格式的不挺好的吗?
补充:.NET技术 , C#