ASP.NET數(shù)據(jù)導(dǎo)入之實(shí)現(xiàn)Excel to MSSQL
ASP.NET數(shù)據(jù)導(dǎo)入之實(shí)現(xiàn)Excel to MSSQL的過程是什么呢?需要注意什么呢?
做網(wǎng)站項(xiàng)目時(shí),可能會(huì)遇到將Excel文件中的ASP.NET數(shù)據(jù)導(dǎo)入至SQL Server數(shù)據(jù)庫(kù)的需求,把Excel也看作數(shù)據(jù)庫(kù),使用OleDb連接后讀取數(shù)據(jù)然后寫入用SqlClient連接的SQL Server數(shù)據(jù)庫(kù)即可,技術(shù)上沒有什么難度。
但是需要考慮的一個(gè)問題是,系統(tǒng)安裝的環(huán)境一般是專用sql server服務(wù)器+web服務(wù)器+客戶端,而Excel文件往往在客戶端導(dǎo)入,如果直接使用SQL語(yǔ)句讀取的話,由于SQL在web服務(wù)器上運(yùn)行,不能讀取到客戶端的Excel地址,就會(huì)出錯(cuò)了。
既然知道了錯(cuò)誤的原因,解決方案也就有了:
1、把客戶端的Excel上傳至web服務(wù)器上某文件夾,注意要給該文件夾設(shè)置網(wǎng)絡(luò)用戶的“寫入”權(quán)限;
2、使用OleDb+sql語(yǔ)句讀取web服務(wù)器上的Excel文件
3、將讀取的ASP.NET數(shù)據(jù)導(dǎo)入到SQL Server 數(shù)據(jù)庫(kù)
4、將web服務(wù)器上的臨時(shí)Excel刪除
部分代碼如下:
- string filename = FileUpload1.PostedFile.FileName.Substring(FileUpload1.PostedFile.FileName.LastIndexOf("\\"));
- FileUpload1.PostedFile.SaveAs(Server.MapPath("fileupload\\") + filename);//上傳文件
- string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
- Server.MapPath("fileupload\\") + filename + ";Extended Properties=Excel 8.0";
- string sqlin = "SELECT * FROM [Sheet2$]";
- OleDbCommand olecommand = new OleDbCommand(sqlin, new OleDbConnection(conn));
- OleDbDataAdapter adapterin = new OleDbDataAdapter(olecommand);
- DataSet dsin = new DataSet();
- adapterin.Fill(dsin);
- DataTable dtin = dsin.Tables[0];//連接并讀取Excel數(shù)據(jù)
- for (i = 3; i <= totalrow; i++)//將Excel文件中***個(gè)工作表的數(shù)據(jù)導(dǎo)入到sql數(shù)據(jù)庫(kù)scjd_youliaoxiaohaojihua表中
- {
- string sql = "insert into scjd_youliaoxiaohaojihua(yuexuhao,danwei,youpin,
- cheliangmingchengxinghao,zichanxingzhi,chepaihao,qiyou,chaiyou,beizhu) values('";
- int j;
- sql += DropDownList1.SelectedValue.ToString() + DropDownList3.SelectedValue.ToString();
- if (DropDownList1.SelectedValue.ToString() != DateTime.Now.Year.ToString() || int.Parse
- (DateTime.Now.Month.ToString()) != int.Parse(DropDownList3.SelectedValue.ToString()))
- {
- sql += "20";
- }
- else
- {
- if (int.Parse(DateTime.Now.Day.ToString()) < 10)
- sql += "0";
- sql += DateTime.Now.Day.ToString();
- }
- if (i-3 + count < 9)
- sql += "00";
- else if (i-3 + count < 99)
- sql += "0";
- sql += (i -3 + 1 + count).ToString();
- sql += "','";
- for (j = 1; j < 8; j++)
- {//遍歷Excel表中一行的所有列,除***一列
- sql += dtin.Rows[i][j].ToString().Trim();
- sql += "','";
- }
- sql += dtin.Rows[i][8].ToString().Trim();
- sql += "')";
- try
- {
- DoSql(sql);
- }
- catch (Exception eeeeeee)
- {
- Response.Write("<script>alert('數(shù)據(jù)導(dǎo)入錯(cuò)誤,請(qǐng)檢查Excel文件')</script>");
- return;
- }
- }
- FileInfo file = new FileInfo(Server.MapPath("fileupload/") + filename);
- if (file.Exists)
- {//刪除文件
- file.Delete();
- }
- protected void DoSql(string sql)//執(zhí)行sql語(yǔ)句的函數(shù)
- {
- SqlConnection conn = new SqlConnection();//創(chuàng)建連接對(duì)象
- conn.ConnectionString = ConfigurationManager.AppSettings["conn"].ToString();//給連接字符串賦值
- conn.Open();//打開數(shù)據(jù)庫(kù)
- SqlCommand cmd = new SqlCommand(sql, conn);
- cmd.ExecuteNonQuery();//
- conn.Close();//關(guān)閉數(shù)據(jù)庫(kù)
- }
注:
1、本文代碼均取自我最近剛做的一個(gè)小項(xiàng)目,部分?jǐn)?shù)據(jù)有較強(qiáng)針對(duì)性,并不通用,只有思路通用
2、由于能力和水平問題,部分代碼顯得有些笨拙,若能靈活運(yùn)用存儲(chǔ)過程,應(yīng)能大幅度簡(jiǎn)化代碼
ASP.NET數(shù)據(jù)導(dǎo)入之實(shí)現(xiàn)Excel to MSSQL的情況就向你介紹到這里,希望通過介紹使你對(duì)于ASP.NET數(shù)據(jù)導(dǎo)入之實(shí)現(xiàn)Excel to MSSQL有所了解。
【編輯推薦】