閱讀456 返回首頁    go 阿裏雲 go 技術社區[雲棲]


ADO.net之導入數據

           在學習完三層之後,發現有很多欠缺的地方,於是找了一些資料進行補充,在看ado視頻時在敲導入導出文件的代碼時很是困惑,原因是對OpenFileDialog控件的方法還是不熟悉,首先給大家展示一個簡單但寫的很繁瑣額程序:

private void btnInput_Click(object sender, EventArgs e)
        {
            if (ofdInput.ShowDialog()==DialogResult.OK )//是否導入文件並“打開”按鈕
            {
                using(FileStream filestream=File.OpenRead (ofdInput.FileName))//如果導入文件並按“打開”按鈕,則將該文件內容寫入filestream
                {
                    using(StreamReader streamReader=new StreamReader(filestream ))//StreamReader是用來讀filestream的
                    {
                        string   line = null;//命名變量line,默認為null值,用來一條條讀取數據
                        while ((line=streamReader.ReadLine ())!=null)//一條條讀數據
                        {
                            string[] strs=line.Split ('|');//定義分割字段的符號“|”
                            string name=strs[0];//每一條的第一個數為name
                            int  age=Convert.ToInt32(strs[1]);//第二個數為age,因為數據庫中的Age為int類型,而這裏有strs[]向age賦的是string類型,因此需要有一個轉換的過程
                            using(SqlConnection conn=new SqlConnection ("server=.;database=IOdata;uid=sa;password=123456"))//創建數據庫連接
                            {
                                conn.Open();//打開連接
                                using (SqlCommand cmd=conn.CreateCommand ())//創建sql命令
                                {
                                    cmd.CommandText = "Insert into T_Persons(Name,Age) values(@Name,@Age)";//插入數據
                                    cmd.Parameters.Add(new SqlParameter ("Name",name) );//運用參數化給name賦值
                                    cmd.Parameters.Add(new SqlParameter("Age", age));
                                    cmd.ExecuteNonQuery();
                                }
                            }
           在上麵的程序中就知道filestream是用來寫入用戶要打開的文件的,而streamreader是用來將文件的內容讀出來,在連接數據庫之後進行將從文件讀出的內容insert into 數據庫,就實現的程序的導入,但是有個問題就是這本來是個很簡單的過程,但是這裏用了連接數據庫,而這個過程是很費事的,所以我們可以簡化,重用sqlcommand,下麵進行一下簡化。         

private void btnInput_Click(object sender, EventArgs e)
        {

            if (ofdInput.ShowDialog() !=DialogResult.OK )//如果不按打開按鈕
            {
                return ;
            }
            using (FileStream filestream = File.OpenRead(ofdInput.FileName))//如果導入文件並按“打開”按鈕,則將該文件內容寫入filestream
            {
                using (StreamReader streamReader = new StreamReader(filestream))//StreamReader是用來讀filestream的
                {
                    using (SqlConnection conn = new SqlConnection("server=.;database=IOdata;uid=sa;password=123456"))//創建數據庫連接
                    {
                        conn.Open();//打開連接
                        using (SqlCommand cmd = conn.CreateCommand())//創建sql命令
                        {
                            cmd.CommandText = "Insert into T_Persons(Name,Age) values(@Name,@Age)";//插入數據

                            string line = null;//命名變量line,默認為null值,用來一條條讀取數據
                            while ((line = streamReader.ReadLine()) != null)//一條條讀數據
                            {
                                string[] strs = line.Split('|');//定義分割字段的符號“|”
                                string name = strs[0];//每一條的第一個數為name
                                int age = Convert.ToInt32(strs[1]);//第二個數為age,因為數據庫中的Age為int類型,而這裏有strs[]向age賦的是string類型,因此需要有一個轉換的過程
                                cmd.Parameters.Clear();
                                cmd.Parameters.Add(new SqlParameter("Name", name));//運用參數化給name賦值
                                cmd.Parameters.Add(new SqlParameter("Age", age));
                                cmd.ExecuteNonQuery();
                            }
                       }
                    }
                }
            }
            MessageBox.Show("導入成功");
          和上段代碼比較,雖然改動不大,但是對一個大的程序來說很有用的,如果反複打開、關閉數據庫是非常耗時的,而用戶是絕對沒有這個耐心的,他們需要的是越快越好,所以和上次考試係統的師哥師姐的講解內容接軌了,大數據問題……



最後更新:2017-04-03 12:55:38

  上一篇:go 連載:麵向對象葵花寶典:思想、技巧與實踐(18) - 用例分析
  下一篇:go 歡迎進入我的個人博客 anzhan.me