ASP.NET Excel导入Sql Server数据库(转)
先看界面图
实现的基本思想:
1,先使用FileUpload控件fuload将Excel文件上传到服务器上得某一个文件夹。
2,使用OleDb将已经上传到服务器上的Excel文件读出来,这里将Excel文件当做一个数据库来读。在联系数据库语句中,Data Source就是该文件在服务器上得物理路径
3,将第二步中读出的数据以DataTable对象返回。
4,遍历DataTable对象,然后到Sql Server数据库中查询,是否存在该条数据。如果存在,可以做更新,或者不做处理;如果不存在,则插入数据。
注意:在遍历DataTable的时候,可是使用dt.Rows[i]["Name"].ToString();Name为Name列的表头,所以Excel中列的顺序就无关紧要了。当然,前提是你知道Excel里列中各表头的名字。如果Excel中列的顺序固定,即可按下面代码中的方式进行。
添加的引用:
using System;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.IO;
using System.Text;
using System.Web;
using System.Web.UI;
代码:
private DataTable xsldata()
{
if(fuload.FileName == "")
{
lbmsg.Text = "请选择文件";
return null;
}
string fileExtenSion;
fileExtenSion = Path.GetExtension(fuload.FileName);
if(fileExtenSion.ToLower() != ".xls" && fileExtenSion.ToLower() != ".xlsx")
{
lbmsg.Text = "上传的文件格式不正确";
return null;
}
try
{
string FileName = "App_Data/" + Path.GetFileName(fuload.FileName);
if(File.Exists(Server.MapPath(FileName)))
{
File.Delete(Server.MapPath(FileName));
}
fuload.SaveAs(Server.MapPath(FileName));
//HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES
string connstr2003 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(FileName) + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
string connstr2007 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath(FileName) + ";Extended Properties=\"Excel 12.0;HDR=YES\"";
OleDbConnection conn;
if(fileExtenSion.ToLower() == ".xls")
{
conn = new OleDbConnection(connstr2003);
}
else
{
conn = new OleDbConnection(connstr2007);
}
conn.Open();
string sql = "select * from [Sheet1$]";
OleDbCommand cmd = new OleDbCommand(sql, conn);
DataTable dt = new DataTable();
OleDbDataReader sdr = cmd.ExecuteReader(); dt.Load(sdr);
sdr.Close();
conn.Close();
//删除服务器里上传的文件
if(File.Exists(Server.MapPath(FileName)))
{
File.Delete(Server.MapPath(FileName));
}
return dt;
}
catch(Exception e)
{
return null;
}
} protected void Btn_Export_Excel_To_DB_Click(object sender, EventArgs e)
{
try{ DataTable dt = xsldata(); //dataGridView2.DataSource = ds.Tables[0];
int errorcount = ;//记录错误信息条数
int insertcount = ;//记录插入成功条数 int updatecount = ;//记录更新信息条数 string strcon = "server=localhost;database=database1;uid=sa;pwd=sa";
SqlConnection conn = new SqlConnection(strcon);//链接数据库
conn.Open(); for(int i = ; i < dt.Rows.Count; i++)
{
string Name = dt.Rows[i][].ToString();//dt.Rows[i]["Name"].ToString(); "Name"即为Excel中Name列的表头
string Sex = dt.Rows[i][].ToString();
int Age = Convert.ToInt32(dt.Rows[i][].ToString());
string Address = dt.Rows[i][].ToString();
if(Name != "" && Sex != "" && Age != && Address != "")
{
SqlCommand selectcmd = new SqlCommand("select count(*) from users where Name='" + Name + "' and Sex='" + Sex + "' and Age='" + Age + "' and Address=" + Address, conn);
int count = Convert.ToInt32(selectcmd.ExecuteScalar());
if(count > )
{
updatecount++;
}
else
{
SqlCommand insertcmd = new SqlCommand("insert into users(Name,Sex,Age,Address) values('" + Name + "','" + Sex + "'," + Age + ",'" + Address + "')", conn);
insertcmd.ExecuteNonQuery();
insertcount++;
}
}
else
{
errorcount++;
}
}
Response.Write((insertcount + "条数据导入成功!" + updatecount + "条数据重复!" + errorcount + "条数据部分信息为空没有导入!"));
}
catch(Exception ex)
{ }
}
ASP.NET Excel导入Sql Server数据库(转)的更多相关文章
- Excel表数据导入Sql Server数据库中
Excel表数据导入Sql Server数据库的方法很多,这里只是介绍了其中一种: 1.首先,我们要先在test数据库中新建一个my_test表,该表具有三个字段tid int类型, tname nv ...
- Excel文件导入SQL Server数据库
Excel表格的使用可谓是非常广泛,博主也简单百度了一下Excel的发展. 发展历程: 1982年 Microsoft推出了它的第一款电子制表软件-Multiplan,并在CP/M系统上大 Excel ...
- 极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)
原文:极限挑战-C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码) 实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本实验将使用5中方法完成这个过程,并详细记录各种方 ...
- 把Excel导入SQL server时出现错误
在把Excel导入SQL server时出现“未在本地计算机上注册 Microsoft.ACE.OLEDB.12.0 ”该 错误信息:未在本地计算机上注册“microsoft.ACE.oledb.12 ...
- excel导入sql server 文本被截断,或者一个或多个字符在目标代码页中没有匹配项 错误处理
excel导入sql server 文本被截断,或者一个或多个字符在目标代码页中没有匹配项 错误处理方法: 方案1:修改注册表 出现文本被截断的原因是SQL Server的导入导出为了确定数据表的字段 ...
- 将Excel导入SQL Server 只能导入数字,其他数据变为NULL怎么解决?
先新建一个TXT文件,把数据粘贴进去 再新建一个Excel文件,在菜单栏中选Data再选From Text 找到txt文件,点import 一定要选Text 点Finish,点OK. 接下来在往数据库 ...
- Excel 导入 Sql Server出错——“文本被截断,或者一个或多个字符在目标代码页中没有匹配项”错误的解决
有人说应该先转成Access, 再转到Sql Server. 其实用处并不大, 要截断的还是被截断了. 原因是,SQL Server的导入导出为了确定数据表的字段类型,取excel文件的前8行来判别. ...
- C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)
作者: Aicken(李鸣) 来源: 博客园 发布时间: 2010-09-08 15:00 阅读: 4520 次 推荐: 0 原文链接 [收藏] 摘要: ...
- 提权案例(一)渗透某asp.net网站通过sql server数据库public 提权 思路分享
先罗列出sql server 角色用户的权限 按照从最低级别角色(bulkadmin)到最高级别角色(sysadmin)的顺序进行描述:1.bulkadmin:这个角色可以运行BULK INSERT语 ...
随机推荐
- 踩坑之路_"var name = ' ';"_迷之BUG
情景介绍:最近写一个拖拽生成图表的工具,自己的思路每次mousedown的时候动态将this的name属性值赋值给全局中变量(自己手贱测试时直接将变量名命名为了'name',一大波bug还有30s到达 ...
- 我的学习之路_第三十四章_jsp
jsp 在只有servlet时,输出页面内容比较麻烦(成本高,java代码中输出HTML标签),所以需要一种技术,主要是HTML页面的代码(HTML,css,js),可以嵌入java代码,来实现动态页 ...
- AVR开发 Arduino方法(一) 端口子系统
Arduino UNO R3使用的主处理器ATMega328P上有3个8位的输入/输出端口,它们分别是PB,PC和PD.Arduino IDE提供的Blink示例可以帮助我们了解端口的数字输出功能: ...
- InnoDB 索引原理
InnoDB索引原理 索引能够提高访问的速率 B+树索引(最为常用和最为有效).全文索引.哈希索引. 数据库中的B+树索引可以分为聚集索引和辅助索引,但是不管是聚集还是辅助的索引,其内部都是B+树,是 ...
- java编写双色球源代码。-----系统作为彩票双色球生成器,模拟机选一注双色球的彩票号码
package demo2; import java.util.Arrays; import java.util.Random; /** * 系统作为彩票双色球生成器,模拟机选一注双色球的彩票号码: ...
- CSS基础学习笔记
一. CSS介绍 1. CSS概述:CSS(Cascading Style Sheets)指层叠样式表,极大提高了工作效率. 2. 基础语法: 属性大于1个之后,属性之间用分号隔开 如果大于1个单词, ...
- 再起航,我的学习笔记之JavaScript设计模式09(原型模式)
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 我们 ...
- MySQL连接问题【mysql_connect和mysql_pconnect区别】
--MySQL连接问题[mysql_connect和mysql_pconnect区别] -------------------------------------------------------- ...
- Oracle execute and call
--execute和call的区别 -------------------------2014/01/14 EXEC is a sqlplus command that put its argumen ...
- PL/SQL 编程(三 )程序包和包体,触发器,视图,索引
一.程序包和包体 程序包(package):存储在数据库中的一组子程序.变量定义.在包中的子程序可以被其它程序包或子程序调用.但如果声明的是局部子程序,则只能在定义该局部子程序的块中调用该局部子程序. ...