把CSDN泄露的账户数据转成SQL语句 - 补充导入数据库的操作
来源:互联网 发布:淘宝买裤子好评 编辑:程序博客网 时间:2024/06/10 23:35
string sql = "insert into dbo.CsdnAccount (UserName, Password, Email) values ('{0}', '{1}', '{2}') "; using (StreamReader streamreader = new StreamReader(@"D:\www.csdn.net.data")) { string s = streamreader.ReadLine(); while (s != null) { string username = s.Split('#')[0].Trim(); string password = s.Split('#')[1].Trim(); string email = s.Split('#')[2].Trim(); using (StreamWriter streamwrite = new StreamWriter(@"D:\www.csdn.net.txt", true)) { streamwrite.WriteLine(string.Format(sql, username, password, email)); streamwrite.WriteLine("\n"); } s = streamreader.ReadLine(); } }
我要把这些数据直接导入数据库中,由于数据量非常庞大,因此我考虑使用SqlBulkCopy进行批量插入。
首先,创建一个DataTable,与数据库中的表对应:
USE [CSDNData]GOCREATE TABLE [dbo].[Account]([UserName] [nvarchar](128) NULL,[Password] [nvarchar](128) NULL,[Email] [nvarchar](256) NULL) ON [PRIMARY]GO
private DataTable CreateTable() { DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn("UserName", typeof(string))); dt.Columns.Add(new DataColumn("Password", typeof(string))); dt.Columns.Add(new DataColumn("Email", typeof(string))); return dt; }
然后,定义一个SqlBulkCopy插入数据的函数:
private void WriteToServer(DataTable dt) { string connectionString = @"Data Source=DST42796\SqlExpress;Initial Catalog=CSDNData;Integrated Security=True"; using (SqlConnection conn = new SqlConnection(connectionString)) { SqlBulkCopy bulk = new SqlBulkCopy(conn); bulk.DestinationTableName = "Account"; bulk.BatchSize = dt.Rows.Count; if (dt != null && dt.Rows.Count != 0) { conn.Open(); bulk.WriteToServer(dt); } bulk.Close(); } }
最后,从本地下载的泄露账户文件中,把数据导入数据库中,每2000条导入一次:
using (StreamReader streamreader = new StreamReader(@"D:\www.csdn.net.data")) { string s = streamreader.ReadLine(); DataTable dt = CreateTable(); while (!string.IsNullOrWhiteSpace(s)) { string username = s.Split('#')[0].Trim(); string password = s.Split('#')[1].Trim(); string email = s.Split('#')[2].Trim(); DataRow newrow = dt.NewRow(); newrow["UserName"] = username; newrow["Password"] = password; newrow["Email"] = email; dt.Rows.Add(newrow); if (dt.Rows.Count % 2000 == 0) { WriteToServer(dt); Thread.Sleep(2000); dt = CreateTable(); } s = streamreader.ReadLine(); } }
每2000条效率太差,优化后的程序是每一百万条导入一次:
using (StreamReader streamreader = new StreamReader(@"D:\www.csdn.net.data", Encoding.GetEncoding("GB2312"))) { string s = streamreader.ReadLine(); DataTable dt = CreateTable(); int i = 0; while (!string.IsNullOrWhiteSpace(s)) { string username = s.Split('#')[0].Trim(); string password = s.Split('#')[1].Trim(); string email = s.Split('#')[2].Trim(); DataRow newrow = dt.NewRow(); newrow["UserName"] = username; newrow["Password"] = password; newrow["Email"] = email; dt.Rows.Add(newrow); if (dt.Rows.Count % 1000000 == 0) { WriteToServer(dt); Thread.Sleep(30000); dt = CreateTable(); } s = streamreader.ReadLine(); i++; } if (i > 6000000) { WriteToServer(dt); } }
- 把CSDN泄露的账户数据转成SQL语句 - 补充导入数据库的操作
- 数据库一表分两表导入数据的SQL 语句
- 把sql server 数据库的数据导入access数据库
- 怎么把excel文件里的数据导入SQL数据库
- 把ACCESS数据库的数据导入SQL里?
- 两个SQLite数据库间导入数据的SQL语句
- mysql数据库常用的基本SQL语句--数据库数据操作
- 最简单的php语句把数据库*.sql文件导入数据库
- 数据库常用的SQL语句(三)数据的操作
- 操作数据库的sql语句
- SQl 语句把Excel中的数据导入到SQL Service数据库中
- txt文件导入数据库的SQL语句
- Sqlite数据库操作的sql操作语句
- Sqlite数据库操作的sql操作语句
- 把ACCESS转成SQL数据库
- 把ACCESS转成SQL数据库
- 把ACCESS转成SQL数据库
- 把ACCESS转成SQL数据库
- “应用程序配置不正确,程序无法启动” 解决办法(vc2008 sp1)
- .NET 中 操作excel 系列--导入与导出.
- 学习的第五天
- qwt安装、配置、应用
- Android手机信息测试
- 把CSDN泄露的账户数据转成SQL语句 - 补充导入数据库的操作
- 在windows下编译FFMPEG-最新2009版本
- js 中类型转换
- 模式其他篇
- 8个开源软件话题网站
- Spring3.0的Jar包详解
- 关于APC(Alternative PHP Cache)和MemCache
- 百度不收录该怎么办
- 换行符问题