C#資料庫資料匯入匯出系列之一 ASP.NET Excel匯入Sql Server資料庫

來源:互聯網
上載者:User

 

C#資料庫資料匯入匯出系列之一 ASP.NET Excel匯入Sql Server資料庫

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

這裡將分為Asp.net匯入Sql Server,Oracle資料庫和WinForm匯入Sql Server,Oracle資料庫。

C#資料庫資料匯入匯出系列之一 ASP.NET Excel匯入Sql Server資料庫

C#資料庫資料匯入匯出系列之二 資料庫匯出到Excel上

C#資料庫資料匯入匯出系列之三 資料庫匯出到Excel下

C#資料庫資料匯入匯出系列之四 WinForm資料庫匯入匯出到Excel

(注意 這裡四篇文章只是基礎的方法,若有更高的要求,可以參考

http://www.cnblogs.com/atao/archive/2009/11/15/1603528.html

http://www.cnblogs.com/tonyqus/category/182110.html 

http://www.yongfa365.com/Item/NPOI-MyXls-DataTable-To-Excel-From-Excel.html .net 通過NPOI或MyXls把DataTable匯出到Excel

 

先看介面圖

實現的基本思想:

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)            {            }        }

就介紹到這裡

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.