xujun1860
今天在给公司做网站时,主管给了一个新的需求给我,由于公司的电话表数据比较多,需要导入到数据库表中,所以特意的从网上查阅了一些资料,简易的写了个粗略的类,基本原理是:把Excel做为数据源,形成datable对象, 然后在数据库建立一张表一列一列的将数据添加到新表中,实现的类:
  1 using System;
  2 using System.Data;
  3 using System.Configuration;
  4 using System.Linq;
  5 using System.Web;
  6 using System.Web.Security;
  7 using System.Web.UI;
  8 using System.Web.UI.HtmlControls;
  9 using System.Web.UI.WebControls;
 10 using System.Web.UI.WebControls.WebParts;
 11 using System.Xml.Linq;
 12 using System.Data.OleDb;
 13 using System.Data.SqlClient;
 14 using PublicClass;
 15 /// <summary>
 16 ///  将Excel数据添加到数据库的表
 17 /// </summary>
 18 public class ExceltoSqlserver
 19 {
 20     public ExceltoSqlserver()
 21     {
 22         //
 23         //TODO: 在此处添加构造函数逻辑
 24         //
 25     }
 26 
 27     OleDbConnection myoledb;
 28     OleDbCommand oledbcmd;
 29     SqlConnection sqlcn;
 30     SqlCommand sqlcmd=new SqlCommand();
 31     MySQL mysql=new MySQL();
 32     /// <summary>
 33     /// 获取Excel数据源连接对象
 34     /// </summary>
 35     /// <param name="path">Excel路径</param>
 36     /// <returns></returns>
 37     public OleDbConnection getoledbcn(string path)
 38     {
 39         OleDbConnection oledb = new OleDbConnection("Provider =Microsoft.Jet.OLEDB.4.0;Data Source = \'"+path+"\';Extended Properties=\'Excel 8.0;IMEX=1;\'");
 40         return oledb;
 41     }
 42     /// <summary>
 43     /// 多sql命令
 44     /// </summary>
 45     /// <param name="strcmd">数据库操作命令数组</param>
 46     /// <returns>返回值大于0表示操作成功,否则表示失败</returns>
 47     public int sqlCommand(string[] strcmd)
 48     {
 49                     sqlcn=mysql.retconnection();
 50                     SqlTransaction trans; //定义事务变量
 51                     sqlcn.Open();
 52                     trans = sqlcn.BeginTransaction(); //开始事务
 53                     int i;
 54                     //循环执行数组命令
 55                     for (i = 0; i < strcmd.Length; i++)
 56                     {
 57                         sqlcmd.Connection = sqlcn;
 58                         sqlcmd.CommandTimeout = 0;
 59                         sqlcmd.CommandType = CommandType.Text;//字符串命令类型
 60                         sqlcmd.CommandText = strcmd[i];
 61                         sqlcmd.Transaction = trans; //命令获取事务
 62                         if (sqlcmd.ExecuteNonQuery() <= 0)
 63                         {
 64                             //执行失败,事务回滚。
 65                             trans.Rollback();
 66                             return 0;
 67                         }
 68                     }
 69                     trans.Commit(); //执行事务;事务结束点。能执行则成功
 70                     sqlcn.Close();
 71                     return 1;
 72  }
 73         
 74     /// <summary>
 75     /// 将Excel数据表转换成databtable
 76     /// </summary>
 77     /// <returns></returns>
 78     public DataTable Mydatatable()
 79     {
 80         myoledb = getoledbcn(@"E:\Book1.xls");
 81         OleDbDataAdapter oledbda = new OleDbDataAdapter("select * from [Sheet1$]", myoledb);
 82         DataSet ds = new DataSet();
 83         oledbda.Fill(ds,"temp");
 84         return ds.Tables["temp"];
 85 
 86     }
 87     /// <summary>
 88     /// 将Excel数据保存到表中
 89     /// </summary>
 90     public int exToSql()
 91     {
 92       
 93         MySQL mysql = new MySQL();
 94         DataTable dt = Mydatatable();
 95         string[] strcmd = new string[dt.Rows.Count];
 96         for (int i = 0; i < dt.Rows.Count; i++)
 97         {
 98             strcmd[i]= "insert into tb_excel(title) values(\'" + dt.Rows[i].ItemArray[0].ToString().Trim() +"\')"//添加一列字段
 99 
100         }
101         if (sqlCommand(strcmd) > 0)
102         {
103             return 1;
104         }
105         else
106         {
107             return 0;
108         }
109      
110 
111     }
112 }
113 
114 

 

分类:

技术点:

相关文章: