ASP.NET Excel导入到SQL Server数据库
本文转自: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;
- public class ExcelToSQL
- {
- //string SqlConnectionString = "Server=(local);Initial Catalog=Test;Integrated Security=True";
- public SqlConnection sqlcon; //创建SQL连接
- public SqlCommand sqlcom; //创建SQL命令对象
- public ExcelToSQL()
- {
- DataOperation dataOperation = new DataOperation(); //用到平台的函数,就是初始化SqlConnection对象
- DBUnit dbUnit = dataOperation.GetDbUnit();
- sqlcon = (SqlConnection)dbUnit.cnt;
- if (sqlcon.State.ToString() == "Open")
- sqlcon.Close();
- }
- public int ImportSql(string excelPath, string tableName) //导入的Excel的路径,数据库里的表名
- {
- if (!TableExist(tableName)) //表名是否存在
- return (int)ImportState.tableNameError;
- DataTable dt = ExcelToDataTable(excelPath);
- if (dt == null)
- {
- return (int)ImportState.excelFormatError;
- }
- ArrayList tableField = GetTableField(tableName); //表格的列名称
- string columnName = "ID,"; //Excel里的列名,增加一个ID列
- for (int i = ; i < dt.Columns.Count; i++)
- {
- columnName += dt.Columns[i].ColumnName + ",";
- string currentColumn = dt.Columns[i].ToString().ToUpper(); //当前列名
- for (int j = ; j < tableField.Count; j++)
- {
- if (tableField[j].ToString().ToUpper() == dt.Columns[i].ToString().ToUpper())
- break; //跳出本层和上一层循环,continue是跳出本层循环,如果用continue,会继续执行j++
- //Excel里的字段必须在Sql中都有
- if ((tableField[j].ToString().ToUpper() != dt.Columns[i].ToString().ToUpper()) && j == tableField.Count - )
- return (int)ImportState.fieldMatchError;
- }
- }
- int m = columnName.LastIndexOf(',');
- columnName = columnName.Remove(m); //移除最后一个逗号
- sqlcom = new SqlCommand();
- sqlcom.Connection = sqlcon;
- sqlcon.Open();
- sqlcom.CommandType = CommandType.Text;
- for (int h = ; h < dt.Rows.Count; h++)
- {
- string value = "'" + System.Guid.NewGuid().ToString() + "'" + ",";
- for (int k = ; k < dt.Columns.Count; k++) //根据列名得到值
- {
- value += "'" + dt.Rows[h][k].ToString() + "'" + ",";
- }
- value = value.Remove(, );
- int n = value.LastIndexOf(',');
- value = value.Remove(n); //移除最后一个逗号
- n = value.LastIndexOf("'");
- value = value.Remove(n);
- try
- {
- string sql = "insert into " + tableName + "(" + columnName + ") values('" + value + "')";
- sqlcom.CommandText = sql;
- string sss = sqlcom.ExecuteNonQuery().ToString();
- }
- catch (Exception err)
- {
- string erroe = err.Message;
- return (int)ImportState.dataTypeError;
- }
- }
- sqlcon.Close();
- sqlcom.Dispose();
- return (int)ImportState.right;
- }
- public DataTable ExcelToDataTable(string excelPath) //把Excel里的数据转换为DataTable,并返回DataTable
- {
- string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelPath + ";Extended Properties='Excel 8.0;IMEX=1'";
- System.Data.OleDb.OleDbConnection Conn = new System.Data.OleDb.OleDbConnection(strCon);
- string strCom = "SELECT * FROM [Sheet1$]";
- DataTable dt;
- try
- {
- Conn.Open();
- System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(strCom, Conn);
- DataSet ds = new DataSet();
- myCommand.Fill(ds, "[Sheet1$]");
- Conn.Close();
- dt = ds.Tables[];
- }
- catch(Exception err)
- {
- return null;
- }
- return dt;
- }
- public bool TableExist(string tableName) //查看数据库里是否有此表名
- {
- sqlcom = new SqlCommand();
- sqlcom.Connection = sqlcon;
- sqlcom.CommandType = CommandType.Text;
- try
- {
- sqlcon.Open();
- string sql = "select name from sysobjects where type='u'";
- sqlcom.CommandText = sql;
- SqlDataReader sqldr = sqlcom.ExecuteReader();
- while (sqldr.Read())
- {
- if (sqldr.GetString().ToUpper() == tableName.ToUpper())
- return true;
- }
- }
- catch { return false; }
- finally
- {
- sqlcon.Close();
- }
- return false;
- }
- public ArrayList GetTableField(string tableName) //得到数据库某一个表中的所有字段
- {
- ArrayList al = new ArrayList();
- sqlcom = new SqlCommand();
- sqlcom.Connection = sqlcon;
- sqlcom.CommandType = CommandType.Text;
- try
- {
- sqlcon.Open();
- string sql = "SELECT b.name FROM sysobjects a INNER JOIN syscolumns b ON a.id = b.id WHERE (a.name = '" + tableName + "')";
- sqlcom.CommandText = sql;
- SqlDataReader sqldr = sqlcom.ExecuteReader();
- while (sqldr.Read())
- {
- al.Add(sqldr.GetString());
- }
- }
- finally
- {
- sqlcon.Close();
- }
- return al; //返回的是表中的字段
- }
- public enum ImportState
- {
- right = , //成功
- tableNameError = ,//表名不存在
- fieldMatchError = ,//excel里的字段和数据库表里的字段不匹配
- dataTypeError = , //转换数据类型时发生错误
- excelFormatError=,//Excel格式不能读取
- }
- public void Alert(string str)
- {
- HttpContext.Current.Response.Write("<script language='javascript'>alert('" + str + "');</script>");
- }
- }
页面调用:
- protected void btnExport_Click(object sender, EventArgs e)
- {
- string filepath = this.fileUpload.PostedFile.FileName;
- if (filepath != "")
- {
- if (this.txtTableName.Text != "")
- {
- if (filepath.Contains("xls"))
- {
- int result = ets.ImportSql(filepath, this.txtTableName.Text);
- if (result == (int)ExcelToSQL.ImportState.tableNameError)
- ets.Alert("此表名在数据中不存在!");
- else if(result==(int)ExcelToSQL.ImportState.excelFormatError)
- ets.Alert("Excel格式不能正确读取!");
- else if (result == (int)ExcelToSQL.ImportState.fieldMatchError)
- ets.Alert("Excel里的字段和Sql Server里的字段不匹配!");
- else if(result==(int)ExcelToSQL.ImportState.dataTypeError)
- ets.Alert("转换数据类型时发生错误!");
- else if (result == (int)ExcelToSQL.ImportState.right)
- {
- ets.Alert("导入成功");
- }
- }
- else ets.Alert("上传的文件类型必须为excel文件!");
- }
- else ets.Alert("表名不能为空!");
- }
- else ets.Alert("没有选择要上传的文件!");
- }
前台代码:
- <form id="form1" runat="server">
- <div>
- <asp:Label ID="Label1" runat="server" Text="路径"></asp:Label>
- <asp:FileUpload ID="fileUpload" runat="server" Width="443px" /><br />
- <asp:Label ID="Label2" runat="server" Text="数据库表名称"></asp:Label>
- <asp:TextBox ID="txtTableName" runat="server"></asp:TextBox><br />
- <asp:Button ID="btnExport" runat="server" Text="导入到SQL" OnClick="btnExport_Click" />
- </div>
- </form>
ASP.NET Excel导入到SQL Server数据库的更多相关文章
- SQL server 导入数据 (excel导入到SQL server数据库)
打开数据库SQL server ,右键数据库,任务,导入数据 点击下一步 选择数据源类型 选择路径,点击下一步 选择将要生成的类型 选择登陆方式 选中,点击下一步 点击编辑映射可以修改将要生成的表,点 ...
- 解决将Excel表导入到SQL Server数据库时出现Text was truncated or one or more characters had no match in the target code错误
编写python爬虫程序可以在电商.旅游等网站上爬取相关评论数据,这些数据可以用于词云制作.感情词分析.提取关键词等,也可以将爬取下来的数据以自己的方式进行展示.评论数据爬取下来后,就要考虑怎样入库, ...
- 图解如何 将Excel里的数据导入到sql server数据库中
项目中,经常会碰到如何将Excel里的数据导入到sql server中的问题. 下面,图解如何实现导入Excel中的数据到sql server 2008 R2: Excel截图如下: 查询pub数据库 ...
- MVC3学习:将excel文件导入到sql server数据库
思路: 1.将excel文件导入到服务器中. 2.读取excel文件,转换成dataset. 3.循环将dataset数据插入到数据库中. 本例子使用的表格为一个友情链接表F_Link(LinkId, ...
- Excel导入MS SQL SERVER 操作
关于Excel导入到sql操作的相关问题总结: 一.大批量数据导入 方法1.从Excel大批量数据导入时我们可以使用sql里面有一个batch copy的功能 方法2.在sql中建一个table ty ...
- 将文件导入到SQL server数据库表中的字段中
一.在要执行的sql server数据库a中执行如下脚本,创建存储过程sp_textcopy /* 将二进制文件导入.导出到数据库相应字段列中 */ CREATE PROCEDURE sp_textc ...
- 如何把EXCEL数据导入到SQL SERVER数据库中 (转)
转:http://blog.csdn.net/jjp837661103/article/details/13509889 在我们完成一个项目开发之后,通常我们需要把客户的很多数据导入到数据库中,面对大 ...
- MySql的数据导入到Sql Server数据库中
步骤一:安装MySql驱动 驱动下载链接:https://dev.mysql.com/downloads/connector/odbc/ 下载完成后安装, 一路Next即可 步骤二:创建DSN DSN ...
- 将CSV文件中的数据导入到SQL Server 数据库中
导入数据时,需要注意 CSV 文件中的数据是否包含逗号以及双引号,存在时,导入会失败 选择数据库 -> 右键 -> 任务 -> 导入数据 ,然后根据弹出的导入导出向导(如下图)中的提 ...
随机推荐
- Android中获取系统的时间
activity代码 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); set ...
- 利用copy函数简单快速输出/保存vector向量容器中的数据
如果要输出vector中的数据我们可以通过循环语句输出,更加简便的方法是利用copy函数直接输出,例子: #include "stdafx.h" #include <iost ...
- JAVA知识的相关积累--用于自己以后查找
基础: Properties类操作文件,主要是对配置文件的操作.java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容 ...
- MVC+ADO模式
MVC+DAO设计模式 博客分类: Java Java WEB开发 MVC+DAO设计模式 本文摘自:http://www.paper.edu.cn 基于MVC+DAO设计模式的Struts ...
- Laravel OAuth2 (三) ---使用 services 和 facades
前言 既然要判断用户是否存在,然后创建用户,那么就要实现几个功能函数.为了方便调用,于是我尝试着写了第一个service 和 facade . 创建 Facade class Social exten ...
- windos下安装PEAR 注意
1.在这里下载PEAR http://pear.php.net/go-pear.phar 在页面右键另存为 go-pear.phar 到PHP的根目录,并去目录查看是否保存为了go-pear.phar ...
- linux命令行后台运行与调回
直接ctrl+z 这个是暂时到后台执行 要调回来 输入 fg
- selenium 怎么处理display:none
页面HTML是这样的: .... <div class="cf w index-middle"> <div id="li" class=&q ...
- C++ ofstream和ifstream详细用法
转载地址:http://soft.chinabyte.com/database/460/11433960.shtml ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就 ...
- hdu 1242 Rescue(bfs)
此刻再看优先队列,不像刚接触时的那般迷茫!这也许就是集训的成果吧! 加油!!!优先队列必须要搞定的! 这道题意很简单!自己定义优先级别! +++++++++++++++++++++++++++++++ ...