程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#數據庫數據導入導出系列之一 ASP.NET Excel導入Sql Server數據庫

C#數據庫數據導入導出系列之一 ASP.NET Excel導入Sql Server數據庫

編輯:C#入門知識

 

 

在日常的項目中,Excel,Word,txt等格式的數據導入到數據庫中是很常見的,我在這裡做一下總結

 

這裡將分為Asp.net導入Sql Server,Oracle數據庫和WinForm導入Sql Server,Oracle數據庫。

 

先看界面圖

 

 

 

實現的基本思想:

 

1,先使用FileUpload控件fuload將Excel文件上傳到服務器上得某一個文件夾。

 

2,使用OleDb將已經上傳到服務器上的Excel文件讀出來,這裡將Excel文件當做一個數據庫來讀。在聯系數據庫語句中,Data Source就是該文件在服務器上得物理路徑

 

3,將第二步中讀出的數據以DataTable對象返回。

 

4,遍歷DataTable對象,然後到Sql Server數據庫中查詢,是否存在該條數據。如果存在,可以做更新,或者不做處理;如果不存在,則插入數據。

 

注意:在遍歷DataTable的時候,可是使用dt.Rows[i]["Name"].ToString();Name為Name列的表頭,所以Excel中列的順序就無關緊要了。當然,前提是你知道Excel裡列中各表頭的名字。如果Excel中列的順序固定,即可按下面代碼中的方式進行。

 

添加的引用:

 

 

using System; 

using System.Data; 

using System.Data.OleDb; 

using System.Data.SqlClient; 

using System.IO; 

using System.Text; 

using System.Web; 

using System.Web.UI; 

 

 

代碼:

 

 

private DataTable  xsldata() 

        { 

           if(fuload.FileName == "") 

            { 

                lbmsg.Text = "請選擇文件"; 

                return null; 

            } 

            string fileExtenSion; 

            fileExtenSion = Path.GetExtension(fuload.FileName); 

            if(fileExtenSion.ToLower() != ".xls" && fileExtenSion.ToLower() != ".xlsx") 

            { 

                lbmsg.Text = "上傳的文件格式不正確"; 

                return null; 

            } 

            try 

            { 

                string FileName = "App_Data/" + Path.GetFileName(fuload.FileName); 

                if(File.Exists(Server.MapPath(FileName))) 

                { 

                    File.Delete(Server.MapPath(FileName)); 

                } 

                fuload.SaveAs(Server.MapPath(FileName)); 

                //HDR=Yes,這代表第一行是標題,不做為數據使用 ,如果用HDR=NO,則表示第一行不是標題,做為數據來使用。系統默認的是YES 

                string connstr2003 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(FileName) + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'"; 

                string connstr2007 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath(FileName) + ";Extended Properties=\"Excel 12.0;HDR=YES\""; 

                OleDbConnection conn; 

                if(fileExtenSion.ToLower() == ".xls") 

                { 

                    conn = new OleDbConnection(connstr2003); 

                } 

                else 

                { 

                    conn = new OleDbConnection(connstr2007); 

                } 

                conn.Open(); 

                string sql = "select * from [Sheet1$]"; 

                OleDbCommand cmd = new OleDbCommand(sql, conn); 

                DataTable dt = new DataTable(); 

                OleDbDataReader sdr = cmd.ExecuteReader(); 

 

                dt.Load(sdr); 

                sdr.Close(); 

                conn.Close(); 

                //刪除服務器裡上傳的文件 

                if(File.Exists(Server.MapPath(FileName))) 

                { 

                    File.Delete(Server.MapPath(FileName)); 

                } 

                return dt; 

            } 

            catch(Exception e) 

            { 

                return null; 

            } 

        } 

 

        protected void Btn_Export_Excel_To_DB_Click(object sender, EventArgs e) 

        { 

            try{ 

 

                DataTable dt = xsldata(); 

 

                //dataGridView2.DataSource = ds.Tables[0]; 

                int errorcount = 0;//記錄錯誤信息條數 

                int insertcount = 0;//記錄插入成功條數 

 

                int updatecount = 0;//記錄更新信息條數 

 

                string strcon = "server=localhost;database=database1;uid=sa;pwd=sa"; 

                SqlConnection conn = new SqlConnection(strcon);//鏈接數據庫 

                conn.Open(); 

 

                for(int i = 0; i < dt.Rows.Count; i++) 

                { 

                    string Name = dt.Rows[i][0].ToString();//dt.Rows[i]["Name"].ToString(); "Name"即為Excel中Name列的表頭 

                    string Sex = dt.Rows[i][1].ToString(); 

                    int Age = Convert.ToInt32(dt.Rows[i][2].ToString()); 

                    string Address = dt.Rows[i][3].ToString(); 

                    if(Name != "" && Sex != "" && Age != 0 && Address != "") 

                    { 

                        SqlCommand selectcmd = new SqlCommand("select count(*) from users where Name='" + Name + "' and Sex='" + Sex + "' and Age='" + Age + "' and Address=" + Address, conn); 

                        int count = Convert.ToInt32(selectcmd.ExecuteScalar()); 

                        if(count > 0) 

                        { 

                            updatecount++; 

                        } 

                        else 

                        { 

                            SqlCommand insertcmd = new SqlCommand("insert into users(Name,Sex,Age,Address) values('" + Name + "','" + Sex + "'," + Age + ",'" + Address + "')", conn); 

                            insertcmd.ExecuteNonQuery(); 

                            insertcount++; 

                        } 

                    } 

                    else 

                    { 

                        errorcount++; 

                    } 

                } 

                Response.Write((insertcount + "條數據導入成功!" + updatecount + "條數據重復!" + errorcount + "條數據部分信息為空沒有導入!")); 

            } 

            catch(Exception ex) 

            { 

 

            } 

        } 

就介紹到這裡

 


摘自 cpcpc的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved