本文转自:http://www.cnblogs.com/lhking/archive/2009/06/08/1499002.html

提供把Excel里的数据导入到SQL Server 数据库,前提是Excel里的字段在Sql Server表里都有,不然会出现错误。注释很详细哦!要引用的命名空间是:
using System.Data.OleDb;
using System.Data.SqlClient;

  1. public class ExcelToSQL
  2. {
  3. //string SqlConnectionString = "Server=(local);Initial Catalog=Test;Integrated Security=True";
  4. public SqlConnection sqlcon; //创建SQL连接
  5. public SqlCommand sqlcom; //创建SQL命令对象
  6.  
  7. public ExcelToSQL()
  8. {
  9. DataOperation dataOperation = new DataOperation(); //用到平台的函数,就是初始化SqlConnection对象
  10. DBUnit dbUnit = dataOperation.GetDbUnit();
  11. sqlcon = (SqlConnection)dbUnit.cnt;
  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列
  28. for (int i = ; i < dt.Columns.Count; i++)
  29. {
  30. columnName += dt.Columns[i].ColumnName + ",";
  31. string currentColumn = dt.Columns[i].ToString().ToUpper(); //当前列名
  32. for (int j = ; 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 - )
  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 = ; h < dt.Rows.Count; h++)
  50. {
  51. string value = "'" + System.Guid.NewGuid().ToString() + "'" + ",";
  52. for (int k = ; k < dt.Columns.Count; k++) //根据列名得到值
  53. {
  54. value += "'" + dt.Rows[h][k].ToString() + "'" + ",";
  55. }
  56. value = value.Remove(, );
  57. int n = value.LastIndexOf(',');
  58. value = value.Remove(n); //移除最后一个逗号
  59. n = value.LastIndexOf("'");
  60. value = value.Remove(n);
  61.  
  62. try
  63. {
  64. string sql = "insert into " + tableName + "(" + columnName + ") values('" + value + "')";
  65. sqlcom.CommandText = sql;
  66. string sss = sqlcom.ExecuteNonQuery().ToString();
  67. }
  68. catch (Exception err)
  69. {
  70. string erroe = err.Message;
  71. return (int)ImportState.dataTypeError;
  72. }
  73. }
  74. sqlcon.Close();
  75. sqlcom.Dispose();
  76.  
  77. return (int)ImportState.right;
  78. }
  79. public DataTable ExcelToDataTable(string excelPath) //把Excel里的数据转换为DataTable,并返回DataTable
  80. {
  81. string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelPath + ";Extended Properties='Excel 8.0;IMEX=1'";
  82. System.Data.OleDb.OleDbConnection Conn = new System.Data.OleDb.OleDbConnection(strCon);
  83. string strCom = "SELECT * FROM [Sheet1$]";
  84. DataTable dt;
  85. try
  86. {
  87. Conn.Open();
  88. System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(strCom, Conn);
  89. DataSet ds = new DataSet();
  90. myCommand.Fill(ds, "[Sheet1$]");
  91. Conn.Close();
  92. dt = ds.Tables[];
  93. }
  94. catch(Exception err)
  95. {
  96. return null;
  97. }
  98. return dt;
  99. }
  100. public bool TableExist(string tableName) //查看数据库里是否有此表名
  101. {
  102. sqlcom = new SqlCommand();
  103. sqlcom.Connection = sqlcon;
  104. sqlcom.CommandType = CommandType.Text;
  105. try
  106. {
  107. sqlcon.Open();
  108. string sql = "select name from sysobjects where type='u'";
  109. sqlcom.CommandText = sql;
  110. SqlDataReader sqldr = sqlcom.ExecuteReader();
  111. while (sqldr.Read())
  112. {
  113. if (sqldr.GetString().ToUpper() == tableName.ToUpper())
  114. return true;
  115. }
  116. }
  117. catch { return false; }
  118. finally
  119. {
  120. sqlcon.Close();
  121. }
  122. return false;
  123. }
  124. public ArrayList GetTableField(string tableName) //得到数据库某一个表中的所有字段
  125. {
  126. ArrayList al = new ArrayList();
  127. sqlcom = new SqlCommand();
  128. sqlcom.Connection = sqlcon;
  129. sqlcom.CommandType = CommandType.Text;
  130. try
  131. {
  132. sqlcon.Open();
  133. string sql = "SELECT b.name FROM sysobjects a INNER JOIN syscolumns b ON a.id = b.id WHERE (a.name = '" + tableName + "')";
  134. sqlcom.CommandText = sql;
  135. SqlDataReader sqldr = sqlcom.ExecuteReader();
  136. while (sqldr.Read())
  137. {
  138. al.Add(sqldr.GetString());
  139. }
  140. }
  141. finally
  142. {
  143. sqlcon.Close();
  144. }
  145. return al; //返回的是表中的字段
  146. }
  147. public enum ImportState
  148. {
  149. right = , //成功
  150. tableNameError = ,//表名不存在
  151. fieldMatchError = ,//excel里的字段和数据库表里的字段不匹配
  152. dataTypeError = , //转换数据类型时发生错误
  153. excelFormatError=,//Excel格式不能读取
  154. }
  155. public void Alert(string str)
  156. {
  157. HttpContext.Current.Response.Write("<script language='javascript'>alert('" + str + "');</script>");
  158. }
  159. }

页面调用:

  1. protected void btnExport_Click(object sender, EventArgs e)
  2. {
  3. string filepath = this.fileUpload.PostedFile.FileName;
  4. if (filepath != "")
  5. {
  6. if (this.txtTableName.Text != "")
  7. {
  8. if (filepath.Contains("xls"))
  9. {
  10. int result = ets.ImportSql(filepath, this.txtTableName.Text);
  11.  
  12. if (result == (int)ExcelToSQL.ImportState.tableNameError)
  13. ets.Alert("此表名在数据中不存在!");
  14. else if(result==(int)ExcelToSQL.ImportState.excelFormatError)
  15. ets.Alert("Excel格式不能正确读取!");
  16. else if (result == (int)ExcelToSQL.ImportState.fieldMatchError)
  17. ets.Alert("Excel里的字段和Sql Server里的字段不匹配!");
  18. else if(result==(int)ExcelToSQL.ImportState.dataTypeError)
  19. ets.Alert("转换数据类型时发生错误!");
  20. else if (result == (int)ExcelToSQL.ImportState.right)
  21. {
  22. ets.Alert("导入成功");
  23. }
  24. }
  25. else ets.Alert("上传的文件类型必须为excel文件!");
  26. }
  27. else ets.Alert("表名不能为空!");
  28. }
  29. else ets.Alert("没有选择要上传的文件!");
  30. }

前台代码:

  1. <form id="form1" runat="server">
  2. <div>
  3. <asp:Label ID="Label1" runat="server" Text="路径"></asp:Label>
  4. &nbsp;<asp:FileUpload ID="fileUpload" runat="server" Width="443px" /><br />
  5. <asp:Label ID="Label2" runat="server" Text="数据库表名称"></asp:Label>&nbsp;
  6. <asp:TextBox ID="txtTableName" runat="server"></asp:TextBox><br />
  7. <asp:Button ID="btnExport" runat="server" Text="导入到SQL" OnClick="btnExport_Click" />
  8. </div>
  9. </form>

ASP.NET Excel导入到SQL Server数据库的更多相关文章

  1. SQL server 导入数据 (excel导入到SQL server数据库)

    打开数据库SQL server ,右键数据库,任务,导入数据 点击下一步 选择数据源类型 选择路径,点击下一步 选择将要生成的类型 选择登陆方式 选中,点击下一步 点击编辑映射可以修改将要生成的表,点 ...

  2. 解决将Excel表导入到SQL Server数据库时出现Text was truncated or one or more characters had no match in the target code错误

    编写python爬虫程序可以在电商.旅游等网站上爬取相关评论数据,这些数据可以用于词云制作.感情词分析.提取关键词等,也可以将爬取下来的数据以自己的方式进行展示.评论数据爬取下来后,就要考虑怎样入库, ...

  3. 图解如何 将Excel里的数据导入到sql server数据库中

    项目中,经常会碰到如何将Excel里的数据导入到sql server中的问题. 下面,图解如何实现导入Excel中的数据到sql server 2008 R2: Excel截图如下: 查询pub数据库 ...

  4. MVC3学习:将excel文件导入到sql server数据库

    思路: 1.将excel文件导入到服务器中. 2.读取excel文件,转换成dataset. 3.循环将dataset数据插入到数据库中. 本例子使用的表格为一个友情链接表F_Link(LinkId, ...

  5. Excel导入MS SQL SERVER 操作

    关于Excel导入到sql操作的相关问题总结: 一.大批量数据导入 方法1.从Excel大批量数据导入时我们可以使用sql里面有一个batch copy的功能 方法2.在sql中建一个table ty ...

  6. 将文件导入到SQL server数据库表中的字段中

    一.在要执行的sql server数据库a中执行如下脚本,创建存储过程sp_textcopy /* 将二进制文件导入.导出到数据库相应字段列中 */ CREATE PROCEDURE sp_textc ...

  7. 如何把EXCEL数据导入到SQL SERVER数据库中 (转)

    转:http://blog.csdn.net/jjp837661103/article/details/13509889 在我们完成一个项目开发之后,通常我们需要把客户的很多数据导入到数据库中,面对大 ...

  8. MySql的数据导入到Sql Server数据库中

    步骤一:安装MySql驱动 驱动下载链接:https://dev.mysql.com/downloads/connector/odbc/ 下载完成后安装, 一路Next即可 步骤二:创建DSN DSN ...

  9. 将CSV文件中的数据导入到SQL Server 数据库中

    导入数据时,需要注意 CSV 文件中的数据是否包含逗号以及双引号,存在时,导入会失败 选择数据库 -> 右键 -> 任务 -> 导入数据 ,然后根据弹出的导入导出向导(如下图)中的提 ...

随机推荐

  1. Android中获取系统的时间

    activity代码 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); set ...

  2. 利用copy函数简单快速输出/保存vector向量容器中的数据

    如果要输出vector中的数据我们可以通过循环语句输出,更加简便的方法是利用copy函数直接输出,例子: #include "stdafx.h" #include <iost ...

  3. JAVA知识的相关积累--用于自己以后查找

    基础: Properties类操作文件,主要是对配置文件的操作.java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容 ...

  4. MVC+ADO模式

    MVC+DAO设计模式 博客分类: Java Java WEB开发   MVC+DAO设计模式 本文摘自:http://www.paper.edu.cn    基于MVC+DAO设计模式的Struts ...

  5. Laravel OAuth2 (三) ---使用 services 和 facades

    前言 既然要判断用户是否存在,然后创建用户,那么就要实现几个功能函数.为了方便调用,于是我尝试着写了第一个service 和 facade . 创建 Facade class Social exten ...

  6. windos下安装PEAR 注意

    1.在这里下载PEAR http://pear.php.net/go-pear.phar 在页面右键另存为 go-pear.phar 到PHP的根目录,并去目录查看是否保存为了go-pear.phar ...

  7. linux命令行后台运行与调回

     直接ctrl+z  这个是暂时到后台执行   要调回来  输入  fg 

  8. selenium 怎么处理display:none

    页面HTML是这样的:  .... <div class="cf w index-middle"> <div id="li" class=&q ...

  9. C++ ofstream和ifstream详细用法

    转载地址:http://soft.chinabyte.com/database/460/11433960.shtml ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就 ...

  10. hdu 1242 Rescue(bfs)

    此刻再看优先队列,不像刚接触时的那般迷茫!这也许就是集训的成果吧! 加油!!!优先队列必须要搞定的! 这道题意很简单!自己定义优先级别! +++++++++++++++++++++++++++++++ ...