C#代码实现从文件中读出数据在导入到数据库

文件数据如图1,每一列的值为STRIP_IDVARCHAR2(20BYTE),SAP_CODEVARCHAR2(30BYTE),PCB_BATCHNOVARCHAR2(3... 文件数据如图1,每一列的值为
STRIP_ID VARCHAR2(20BYTE),
SAP_CODE VARCHAR2(30BYTE),
PCB_BATCHNO VARCHAR2(30BYTE),
VENDOR_NAME VARCHAR2(30BYTE),
COLUMN_COUNT VARCHAR2(10BYTE),
ROW_COUNT VARCHAR2(10BYTE),
GOOD_COUNT VARCHAR2(10BYTE),
REJECT_COUNT VARCHAR2(10BYTE),
MAP_DATA VARCHAR2(3000BYTE),
INSERTTIME DATE
导入成图二的状态

具体思路是先将数据文件导入进一个数组,但注意前八项是单独的表内,后面的0100110 11101101100111 11001101011111 11111101111111 11111111111011 1111110则在一个表内每行用/分开,空格保留,且每行表单最后添加
INSERTTIME 在线等解决
展开
 我来答
秀乞群群
推荐于2018-03-22 · TA获得超过19万个赞
知道顶级答主
回答量:6.7万
采纳率:91%
帮助的人:2.3亿
展开全部

代码如下:

//定义数据连接字符串
        private string connStr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
 
        /// <summary>
        /// 用insert方法从文本文件中批量导入到数据库表中
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnInsert_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "文本文档|*.txt";
            //如果用户没有选择文件并确定则直接返回
            if (ofd.ShowDialog() != true)
            {
                return;
            }
            //获得文件名包括路径
            string fileName = ofd.FileName;
 
            try
            {
                //定义一个开始时间
                DateTime startTime = DateTime.Now;
                //因为文件比较大,所有使用StreamReader的效率要比使用File.ReadLines高
                using (StreamReader sr = new StreamReader(fileName, Encoding.Default))
                {
                    using (SqlConnection conn = new SqlConnection(connStr))
                    {
                        conn.Open();
                        using (SqlCommand cmd = conn.CreateCommand())
                        {
                            while (!sr.EndOfStream)
                            {
                                 
                                string readStr = sr.ReadLine();//读取一行数据
                                if (readStr.StartsWith("1"))//去掉标题行
                                {
                                    string[] strs = readStr.Split(new char[] { '\t', '"' }, StringSplitOptions.RemoveEmptyEntries);//将读取的字符串按"制表符/t“和””“分割成数组
 
                                    string startNum = strs[0];
                                    string numArea = strs[1];
                                    string numType = strs[2];
 
                                    cmd.CommandText = "insert into T_PhoneInfo(FStartNum,FNumArea,FNumType) values(@startNum,@numArea,@numType)";
                                    cmd.Parameters.Clear();//清除上一次的参数
                                    cmd.Parameters.Add(new SqlParameter("@startNum", startNum));
                                    cmd.Parameters.Add(new SqlParameter("@numArea", numArea));
                                    cmd.Parameters.Add(new SqlParameter("@numType", numType));
                                    cmd.ExecuteNonQuery();
                                }
                            }
                        }
                    }
 
                }
 
                //结束时间-开始时间=总共花费的时间
                TimeSpan ts = DateTime.Now - startTime;
                MessageBox.Show("导入数据成功!共花费时间:" + ts.ToString());
 
            }
            catch (IOException ex)
            {
                MessageBox.Show(ex.Message);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
百度网友e2d6efa
2014-04-02 · 超过13用户采纳过TA的回答
知道答主
回答量:28
采纳率:0%
帮助的人:20.8万
展开全部
有思路了还有什么难解决的?读出文件流的内容,封装成数组根据“\r\n”分割,然后insert就行了
追问
渣技术,写不出来代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
airroom110
2014-04-02 · TA获得超过219个赞
知道小有建树答主
回答量:498
采纳率:0%
帮助的人:112万
展开全部
二百分我给弄了。
追问
没有那么多分
追答
 //this.txtSavePath.Text为读取文件的路径。
      FileStream fs = new FileStream(this.txtSavePath.Text, FileMode.Open, FileAccess.Read);
                StreamReader mysr = new StreamReader(fs);
                //可以根据数据库的字段来判断到底是多少,此处根据你的上下文写9
                String[] str = new String[9];
                int i =0;
                string ss = "";
                //当数据可以读取时,进入循环
                while (mysr.BaseStream.CanRead)
                {     
                    //读取前面8个字段值
                    if (i <= 7)
                        str[i] = mysr.ReadLine();
                    else
                    {
                        if (mysr.EndOfStream)
                            break;
                        //读取后面二进制部分的值
                        ss = ss + mysr.ReadLine() + "/";
                    }
                    i++;
                }
                //把读取值赋值给数组,至此结束读取。
                str[8] = ss.TrimEnd('/');
                //估计你也就这里难,插入数据库的部分省略。
                mysr.Close();
                fs.Close();
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式