将TXT文件中的数据整理成sql数据库

来源:互联网 发布:沈阳医疗软件代理 编辑:程序博客网 时间:2024/05/21 22:52

在工作中遇到一个问题,合作单位给了一个400M的txt文件,里面包含了工作中需要的数据,于是便有了这种需求和下面的代码,在此贴出来,共享。

TXT文件中数据排列规则:1、每一行是一条数据; 2、每个字段之间用|| 分割。

我首先用sql server 进行数据导入,但总是报错,因为该TXT文件中有些数据不完整,使得直接导入失败。

                                                                                                                                                      TXT文件截图

代码写的有点乱,主要是为例快速实现功能,其他的考虑少一些,见谅。

下面这段代码运行了3个多小时,完成了221万条记录的读取、分段和写入数据库


 public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }           public static string[,] test;        private void Form1_Load(object sender, EventArgs e)        {            string[] strRead = new string[30];            int EveryRow = 0;            string line = "";                    string path = "E:\\编程1\\WriteTXT\\WriteTXT.txt";            StreamReader sr = new StreamReader(path, Encoding.Default);            StreamReader srWrite = new StreamReader(path, Encoding.Default);            //先得到txt文件中的总行数,用来建立数组的第一纬度           int  row = 0;            while (!sr.EndOfStream)            {                line = sr.ReadLine();                row++;            }            MessageBox.Show(row.ToString());            test = new string[row, 20];            while (!srWrite.EndOfStream)            {                line = srWrite.ReadLine();                tiqu(line, EveryRow);                EveryRow++;            }            //将数据写入数据库            string connStr = "Data Source=.;Initial Catalog=*****;User ID=sa;Password=***";            SqlConnection conn = new SqlConnection();            conn.ConnectionString = connStr;            conn.Open();            SqlCommand cmd = new SqlCommand();            cmd.Connection = conn;            cmd.Parameters.Add("@t0", SqlDbType.Text);            cmd.Parameters.Add("@t1", SqlDbType.Text);            cmd.Parameters.Add("@t2", SqlDbType.Text);            cmd.Parameters.Add("@t3", SqlDbType.Text);            cmd.Parameters.Add("@t4", SqlDbType.Text);            cmd.Parameters.Add("@t5", SqlDbType.Text);            cmd.Parameters.Add("@t6", SqlDbType.Text);            cmd.Parameters.Add("@t7", SqlDbType.Text);            cmd.Parameters.Add("@t8", SqlDbType.Text);            cmd.Parameters.Add("@t9", SqlDbType.Text);            cmd.Parameters.Add("@t10", SqlDbType.Text);            cmd.Parameters.Add("@t11", SqlDbType.Text);            cmd.Parameters.Add("@t12", SqlDbType.Text);            cmd.Parameters.Add("@t13", SqlDbType.Text);            cmd.Parameters.Add("@t14", SqlDbType.Text);            try            {                for (int i = 0; i < row; i++)                {                    string Sqlstr = string.Format("insert into zhuanliData (原序号,申请号,公开号,公开日,公告号,公告日,标题,申请日,代理人,代理机构,国省代码,发明人,申请人,优先权号,地址) values(@t0,@t1,@t2,@t3,@t4,@t5,@t6,@t7,@t8,@t9,@t10,@t11,@t12,@t13,@t14)");                    cmd.Parameters["@t0"].Value = test[i, 0];                    cmd.Parameters["@t1"].Value = test[i, 1];                    cmd.Parameters["@t2"].Value = test[i, 2];                    cmd.Parameters["@t3"].Value = test[i, 3];                    cmd.Parameters["@t4"].Value = test[i, 4];                    cmd.Parameters["@t5"].Value = test[i, 5];                    cmd.Parameters["@t6"].Value = test[i, 6];                    cmd.Parameters["@t7"].Value = test[i, 7];                    cmd.Parameters["@t8"].Value = test[i, 8];                    cmd.Parameters["@t9"].Value = test[i, 9];                    cmd.Parameters["@t10"].Value = test[i, 10];                    cmd.Parameters["@t11"].Value = test[i, 11];                    cmd.Parameters["@t12"].Value = test[i, 12];                    cmd.Parameters["@t13"].Value = test[i, 13];                    cmd.Parameters["@t14"].Value = test[i, 14];                    cmd.CommandText = Sqlstr;                    cmd.ExecuteNonQuery();                }            }            catch (Exception ex)            {                MessageBox.Show(ex.ToString());            }            ////将二维数组test绑定到DataTable         //  DataTable ta = BingDTable(row);           //dataGridView1.DataSource = ta;            MessageBox.Show("导入数据完毕!恭喜恭喜!!本次共导入数据"+row.ToString()+ "条,可与数据库中数据总条数进行比较");        }        private static DataTable BingDTable(int row)        {            DataTable ta = new DataTable();            for (int i = 0; i < 20; i++)            {                ta.Columns.Add("" + i, typeof(string));            }            for (int i = 0; i < row; i++)            {                DataRow dr = ta.NewRow();                for (int j = 0; j < 20; j++)                {                    dr[j] = test[i, j];                }                ta.Rows.Add(dr);            }            return ta;        }               //读取第一个strRead[0]中的内容,并用||加以区分提取,尝试依次        public void tiqu(string strTQ, int EverRow2)        {            //   int counter = Count(strTQ, "||");   //得到||的个数,也就是下面的循环次数            int k1, k2 = 0;            int col = 1;                                 k1 = strTQ.IndexOf("||"); //得到||在strTQ中的第一个位置            test[EverRow2, 0] = strTQ.Substring(0, k1); //先取出test[0,0]到k1之间的第一个子串            while (k1 > 0 && k2 < strTQ.Length - 4)            {                k2 = strTQ.IndexOf("||", k1 + 2);                test[EverRow2, col] = strTQ.Substring(k1 + 2, k2 - k1 - 2);                k1 = k2;                col++;            }        }//tiqu()结束        public SqlConnection ConnDB()        {            string connStr = "Data Source=.;Initial Catalog=counttime;User ID=sa;Password=110";            SqlConnection conn = new SqlConnection();            conn.ConnectionString = connStr;            return conn;                         }    }


0 0
原创粉丝点击