CSDN에서 유출된 계정 데이터를 SQL 문장으로 변환 - 데이터베이스 가져오기 작업 추가
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("
");
}
s = streamreader.ReadLine();
}
}
이 데이터를 데이터베이스에 직접 가져오려고 합니다. 데이터 양이 매우 많기 때문에 SqlBulkCopy를 사용하여 대량으로 삽입하는 것을 고려합니다.
먼저 데이터베이스의 테이블에 해당하는 DataTable을 만듭니다.
USE [CSDNData]
GO
CREATE 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);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.