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 文件中的数据是否包含逗号以及双引号,存在时,导入会失败 选择数据库 -> 右键 -> 任务 -> 导入数据 ,然后根据弹出的导入导出向导(如下图)中的提 ...
随机推荐
- Flex 按钮添加图标
第一种是在Flex应用中创建一个变量,利用[Bindable]和[Embed] ,在代码中以参数形式传入制定图标(icon)的路径,然后利用类似icon="{Icon}"的代码嵌入 ...
- Android学习笔记(十七)——使用意图调用内置应用程序
使用意图调用内置应用程序 1.创建一个新的Android项目并命名为Intents,在main.xml文件里加入两个Button: <Button android:id="@+id/b ...
- POJ 1236 Network of Schools(强连通 Tarjan+缩点)
POJ 1236 Network of Schools(强连通 Tarjan+缩点) ACM 题目地址:POJ 1236 题意: 给定一张有向图,问最少选择几个点能遍历全图,以及最少加入�几条边使得 ...
- MySQL的字段设计
1.尽量使用数字,因为文本占空间,不利于查询(针对有限种类文本)
- VPN连接在遇到飞鱼星设备时可能出现的疑难问题
在连接VPN设备时,设置都是正常的.在
- python之filter过滤器
Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是 ...
- LNMP下基于端口的虚拟主机配置
1.在/usr/local/nginx/conf/nginx.conf文件的的最后一个"}"前加上 include vhost/*.conf; 2.在/usr/local/ngin ...
- QT https post请求(QNetworkRequest要设置SSL证书,而SSL证书认证有三种,实测成功)
以VS开发为例.因为https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在使用之前必须先做一些准备工作: 需要安装OpenSSL库: 1.首先打开http://slproweb.com ...
- 在 Windows Azure 网站 (WAWS) 上对 Orchard CMS 使用 Azure 缓存
编辑人员注释: 本文章由 Windows Azure 网站团队的项目经理 Sunitha Muthukrishna 撰写. 如果您当前的 OrchardCMS 网站在 Windows Azure 网站 ...
- android自定义控件 onMeasure() 测量尺寸
上次讲的自定义控件刷新点屏幕的任意地方都会刷新,而且在xml里自定义控件下面放一个textview的话,这个TextView是显示不出来的,不只这个,以前的几个自定义控件都是 为什么呢?今天来讲下on ...