ASP.NET Excel导入SQL Server数据库的操作

开发 后端
ASP.NET Excel导入SQL Server数据库的操作是什么呢?具体的实现又是如何呢?本文就向你介绍。

ASP.NET Excel导入SQL Server数据库是如何实现的呢,前提是ASP.NET Excel导入SQL Server数据库的字段在表里都有,不然会出现错误。

ASP.NET Excel导入SQL Server数据库类文件:

  1. using System.Data.OleDb;  
  2. using System.Data.SqlClient;  
  3.  
  4. public class ExcelToSQL  
  5. {  
  6.         public SqlConnection sqlconnew SqlConnection("连接字符串");        //创建SQL连接  
  7.     public SqlCommand sqlcom;          //创建SQL命令对象  
  8.  
  9.  
  10.     public ExcelToSQL()  
  11.      {  
  12.                if (sqlcon.State.ToString() == "Open")  
  13.              sqlcon.Close();  
  14.      }  
  15.     public int ImportSql(string excelPath, string tableName)  //导入的Excel的路径,数据库里的表名  
  16.      {  
  17.         if (!TableExist(tableName)) //表名是否存在  
  18.             return (int)ImportState.tableNameError;  
  19.  
  20.          DataTable dt = ExcelToDataTable(excelPath);  
  21.         if (dt == null)  
  22.         {  
  23.             return (int)ImportState.excelFormatError;  
  24.         }  
  25.          ArrayList tableField = GetTableField(tableName);   //表格的列名称  
  26.  
  27.         string columnName = "ID,"//Excel里的列名,增加一个ID列,如果ID自动递增则不需要增加ID列,只需要columnName=“”就可以了。  
  28.         for (int i = 0; i < dt.Columns.Count; i++)  
  29.          {  
  30.              columnName += dt.Columns[i].ColumnName + ",";  
  31.             string currentColumn = dt.Columns[i].ToString().ToUpper(); //当前列名  
  32.             for (int j = 0; j < tableField.Count; j++)  
  33.              {  
  34.                 if (tableField[j].ToString().ToUpper() == dt.Columns[i].ToString().ToUpper())  
  35.                     break;   //跳出本层和上一层循环,continue是跳出本层循环,如果用continue,会继续执行j++  
  36.                 //Excel里的字段必须在Sql中都有  
  37.                 if ((tableField[j].ToString().ToUpper() != dt.Columns[i].ToString().ToUpper()) && j == tableField.Count - 1)  
  38.                     return (int)ImportState.fieldMatchError;  
  39.              }  
  40.          }  
  41.         int m = columnName.LastIndexOf(',');  
  42.          columnName = columnName.Remove(m);  //移除最后一个逗号  
  43.  
  44.          sqlcom = new SqlCommand();  
  45.          sqlcom.Connection = sqlcon;  
  46.          sqlcon.Open();  
  47.          sqlcom.CommandType = CommandType.Text;  
  48.  
  49.         for (int h = 0; h < dt.Rows.Count; h++)  
  50.          {  
  51.             string value = "'" + System.Guid.NewGuid().ToString() + "'" + ","//如果ID自动递增ID列不需要增加了,那么value的初始值只需要value=“”就可以了。  
  52.  
  53.             for (int k = 0; k < dt.Columns.Count; k++) //根据列名得到值  
  54.              {  
  55.                  value += "'" + dt.Rows[h][k].ToString() + "'" + ",";  
  56.              }  
  57.              value = value.Remove(0, 1);  
  58.             int n = value.LastIndexOf(',');  
  59.              value = value.Remove(n);    //移除最后一个逗号  
  60.              n = value.LastIndexOf("'");  
  61.              value = value.Remove(n);  
  62.  
  63.             try 
  64.              {  
  65.                 string sql = "insert into " + tableName + "(" + columnName + ") values('" + value + "')";  
  66.                  sqlcom.CommandText = sql;  
  67.                 string sss = sqlcom.ExecuteNonQuery().ToString();  
  68.              }  
  69.             catch (Exception err)  
  70.              {  
  71.                 string erroe = err.Message;  
  72.                 return (int)ImportState.dataTypeError;  
  73.              }  
  74.          }  
  75.          sqlcon.Close();  
  76.          sqlcom.Dispose();  
  77.  
  78.         return (int)ImportState.right;  
  79.      }  
  80.     public DataTable ExcelToDataTable(string excelPath)  //把Excel里的数据转换为DataTable,并返回DataTable  
  81.      {  
  82.            string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelPath + ";Extended Properties='Excel 8.0;IMEX=1'";  
  83.         System.Data.OleDb.OleDbConnection Conn = new System.Data.OleDb.OleDbConnection(strCon);  
  84.         string strCom = "SELECT * FROM [Sheet1$]";  
  85.         DataTable dt;  
  86.         try 
  87.         {  
  88.             Conn.Open();  
  89.             System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(strCom, Conn);  
  90.             DataSet ds = new DataSet();  
  91.             myCommand.Fill(ds, "[Sheet1$]");  
  92.             Conn.Close();  
  93.             dt = ds.Tables[0];  
  94.         }  
  95.         catch(Exception err)  
  96.         {  
  97.             return null;  
  98.         }  
  99.         return dt;  
  100.      }  
  101.     public bool TableExist(string tableName) //查看数据库里是否有此表名  
  102.      {  
  103.          sqlcom = new SqlCommand();  
  104.          sqlcom.Connection = sqlcon;  
  105.          sqlcom.CommandType = CommandType.Text;  
  106.         try 
  107.          {  
  108.              sqlcon.Open();  
  109.             string sql = "select name from sysobjects where type='u'";  
  110.              sqlcom.CommandText = sql;  
  111.              SqlDataReader sqldr = sqlcom.ExecuteReader();  
  112.             while (sqldr.Read())  
  113.              {  
  114.                 if (sqldr.GetString(0).ToUpper() == tableName.ToUpper())  
  115.                     return true;  
  116.              }  
  117.          }  
  118.         catch { return false; }  
  119.         finally 
  120.          {  
  121.              sqlcon.Close();  
  122.          }  
  123.         return false;  
  124.      }  
  125.     public ArrayList GetTableField(string tableName)  //得到数据库某一个表中的所有字段  
  126.      {  
  127.          ArrayList al = new ArrayList();  
  128.          sqlcom = new SqlCommand();  
  129.          sqlcom.Connection = sqlcon;  
  130.          sqlcom.CommandType = CommandType.Text;  
  131.         try 
  132.          {  
  133.              sqlcon.Open();  
  134.             string sql = "SELECT b.name FROM sysobjects a INNER JOIN syscolumns b ON a.id = b.id WHERE (a.name = '" + tableName + "')";  
  135.              sqlcom.CommandText = sql;  
  136.              SqlDataReader sqldr = sqlcom.ExecuteReader();  
  137.             while (sqldr.Read())  
  138.              {  
  139.                  al.Add(sqldr.GetString(0));  
  140.              }  
  141.          }  
  142.         finally 
  143.          {  
  144.              sqlcon.Close();  
  145.          }  
  146.         return al; //返回的是表中的字段  
  147.      }  
  148.     public enum ImportState  
  149.      {  
  150.          right = 1, //成功  
  151.          tableNameError = 2,//表名不存在  
  152.          fieldMatchError = 3,//excel里的字段和数据库表里的字段不匹配  
  153.          dataTypeError = 4, //转换数据类型时发生错误  
  154.         excelFormatError=5,//Excel格式不能读取  
  155.      }  
  156.     public void Alert(string str)  
  157.      {  
  158.          HttpContext.Current.Response.Write("<script language='javascript'>alert('" + str + "');</script>");  
  159.      }  

ASP.NET Excel导入SQL Server数据库的操作就向你介绍到这里,希望通过实例对你了解ASP.NET Excel导入SQL Server数据库有所帮助。

【编辑推荐】

  1. ASP.NET自定义控件开发浅析
  2. ASP.NET服务器控件之生命周期浅析
  3. ASP.NET中Excel动态实现浅析
  4. ASP.NET操作Excel注意事项浅析
  5. ASP.NET读取Excel文件的三大方法浅析
责任编辑:仲衡 来源: IT168
相关推荐

2009-07-28 11:23:04

Excel导入SQL

2009-07-31 10:29:57

ASP.NET数据库操

2009-08-05 09:38:28

SQL Server数

2009-08-12 11:04:38

ASP.NET和SQL

2009-08-04 11:22:07

ASP.NET数据导入

2009-09-03 19:30:02

ASP.NET数据库SQL Server

2009-07-28 17:36:21

ASP.NET数据库连

2009-02-23 15:20:03

SQL Server数据库ASP.NET

2009-07-31 09:57:47

ASP.NET数据库缓

2010-07-21 14:17:36

SQL Server数

2012-08-03 10:20:06

ASP.NET

2009-07-31 16:45:23

ASP.NET数据库操

2009-03-09 17:46:16

ASP.NETSQLOracle

2011-03-10 10:50:01

excelsql数据库

2009-08-11 12:52:05

ASP.NET数据库程

2009-08-05 15:40:49

ASP.NET连接数据

2009-07-29 09:12:31

ASP.NET数据库连

2009-07-28 10:26:30

ASP.NET操作Ex

2009-07-31 16:09:23

ASP.NET数据库图

2011-08-01 23:34:34

ASP.NETOracle
点赞
收藏

51CTO技术栈公众号