实例介绍
【实例简介】
asp.net导入excel文件到sqlserver数据库,采用事务方式,并且注释完全。
【实例截图】
【核心代码】
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Data.OleDb; using System.IO; using System.Data.SqlClient; using System.Configuration; using System.Collections; namespace ExcelImport { public partial class _Default : Page { protected void Page_Load(object sender, EventArgs e) { } ArrayList sqlList = new ArrayList(); /// <summary> /// 连接字符串 /// </summary> public static readonly string connectionString = ConfigurationManager.ConnectionStrings["CRRCDB"].ConnectionString; #region 问题:未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序 // 解决访问Excel数据源时出现 未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序 // 1、确保安装了Microsoft.ACE.OLEDB.12.0驱动 // http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe // 2、在vs中右击项目--》属性--》生成 下的 目标平台 改为x86 // 如果以上两个方法还是不行的话,用第三个方法 // 3、在对应的 IIS 应用程序池中,“设置应用程序池默认属性”右击/“高级设置”/"启用32位应用程序",设置为 true。 #endregion public System.Data.DataTable GetExcelDatatable(string fileUrl) { //支持.xls和.xlsx,即包括office2010等版本的 HDR=Yes代表第一行是标题,不是数据; string cmdText = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'"; System.Data.DataTable dt = null; //建立连接 OleDbConnection conn = new OleDbConnection(string.Format(cmdText, fileUrl)); try { //打开连接 if (conn.State == ConnectionState.Broken || conn.State == ConnectionState.Closed) { conn.Open(); } System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); string strSql = "select * from [Sheet1$]"; OleDbDataAdapter da = new OleDbDataAdapter(strSql, conn); DataSet ds = new DataSet(); da.Fill(ds); dt = ds.Tables[0]; return dt; } catch (Exception exc) { throw exc; } finally { conn.Close(); conn.Dispose(); } } /// <summary> /// 用事务机制执行多条不带参数的SQL语句。 /// </summary> /// <param name="sqlStringList">不带参数的SQL语句集合。</param> public void ExecuteTransaction(ArrayList sqlStringList) { using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["CRRCDB"].ConnectionString)) { conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; SqlTransaction tx = conn.BeginTransaction(); cmd.Transaction = tx; try { for (int n = 0; n < sqlStringList.Count; n ) { string strsql = sqlStringList[n].ToString(); if (strsql.Trim().Length > 1) { cmd.CommandText = strsql; cmd.ExecuteNonQuery(); } } tx.Commit(); } catch (System.Data.SqlClient.SqlException e) { tx.Rollback(); throw new Exception(e.Message); } } } protected void Button1_Click(object sender, EventArgs e) { try { if (FileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有指定文件 { Response.Write("<script>alert('请您选择Excel文件')</script> "); return;//当无文件时,返回 } string IsXls = Path.GetExtension(FileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名 if (IsXls != ".xlsx" && IsXls != ".xls") { Response.Write("<script>alert('只可以选择Excel文件')</script>"); return;//当选择的不是Excel文件时,返回 } string filename = FileUpload1.FileName; //获取Execle文件名 DateTime日期函数 string savePath = Server.MapPath(("uploadfiles\\") filename);//Server.MapPath 获得虚拟服务器相对路径 DataTable ds = new DataTable(); FileUpload1.SaveAs(savePath); //SaveAs 将上传的文件内容保存在服务器上 ds = GetExcelDatatable(savePath); //调用自定义方法 DataRow[] dr = ds.Select(); //定义一个DataRow数组 int rowsnum = ds.Rows.Count; int successly = 0; if (rowsnum == 0) { Response.Write("<script>alert('Excel表为空表,无数据!')</script>"); //当Excel表为空时,对用户进行提示 } else { string _Result = ""; for (int i = 0; i < dr.Length; i ) { //前面除了你需要在建立一个“upfiles”的文件夹外,其他的都不用管了,你只需要通过下面的方式获取Excel的值,然后再将这些值用你的方式去插入到数据库里面 int title = Convert.ToInt32(dr[i]["标题"]); string linkurl = dr[i]["链接地址"].ToString(); string categoryname = dr[i]["分类"].ToString(); string customername = dr[i]["内容摘要"].ToString(); try { var uuid = Guid.NewGuid().ToString(); string sql = string.Format("insert into dbo.ANDONGXIANGMU(lastUser,XMMC,PAIXU,XS) values ('{0}','{1}','{2}','{3}')", title, linkurl, categoryname, customername); sqlList.Add(sql); } catch (Exception ex) { _Result = _Result ex.InnerException "\\n\\r"; } } ExecuteTransaction(sqlList); string strmsg = "Excle表导入成功!"; System.Web.HttpContext.Current.Response.Write("<Script Language='JavaScript'>window.alert('" strmsg "');</script>"); } } catch (Exception ex) { System.Web.HttpContext.Current.Response.Write("<Script Language='JavaScript'>window.alert('" ex.Message "');</script>"); } } } }
相关软件
网友评论
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)