EXECL文件导入数据库
Execl数据导入数据库:
注意事项:execl中的列名与列数要与数据库的列名和列数一致、值类型一致,列名不一致的话可在导入的时候,给字段起别名,确定保持一致
v 界面代码:

<div>
导入Execl路径:
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="ExeclToSql" runat="server" Text="导入数据库" Width="120px" onclick="ExeclToSql_Click" />
</div>
v 后台cs代码:
protected void ExeclToSql_Click(object sender, EventArgs e)
{
string excelFile = "";
//string excelFile = FileUpload1.FileName;
System.Web.HttpPostedFile postFile = FileUpload1.PostedFile;
DataSet ds = new DataSet();
OleDbConnection conn = new OleDbConnection();
try
{
//判断路径是否为空
if (postFile.FileName != String.Empty)
{
//新建文件名
string fileName = Guid.NewGuid().ToString() + ".xls";
//文件上传服务器目录路径
string absPath = Request.PhysicalApplicationPath + ("upload\\"); if (!System.IO.Directory.Exists(absPath)) System.IO.Directory.CreateDirectory(absPath); //上传文件,要检查一下是否建立了相关目录
//保存文件至服务器
postFile.SaveAs(absPath + fileName);
//文件全部路径
excelFile = absPath + fileName;
try
{
//value代表数据库的字段名,*代表execl的字段
string ss = "INSERT INTO 数据库表名(value) SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0','Data Source=" + excelFile + ";Extended Properties=Excel 8.0')...[sheet1$]";
//注意:改方法为封装好的SQL执行语句,请用自己封装的连接数据库执行增删改查的类方法
DbHelperSQL.ExecuteSql(ss);
Page.RegisterStartupScript("js", "<script>alert('导入数据成功!')</script>");
}
catch
{
Page.RegisterStartupScript("js", "<script>alert('导入数据失败!')</script>");
}
}
else
{
throw new Exception("请上传文件!");
}
}
catch
{
Page.RegisterStartupScript("js", "<script>alert('错误!')</script>");
}
}
或者用以下类方法:
public class ExcelToSQL
{
//string sqlcon = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
public SqlConnection sqlcon = new SqlConnection("连接字符串"); //创建SQL连接
public SqlCommand sqlcom; //创建SQL命令对象
public ExcelToSQL()
{
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);//把Excel里的数据转换为DataTable,并返回DataTable
if (dt == null)
{
return (int)ImportState.excelFormatError;//转换失败
}
ArrayList tableField = GetTableField(tableName); //表格的列名称 (得到数据库表的列名)
string columnName = "MGUID,"; //Excel里的列名,增加一个ID列,如果ID自动递增则不需要增加ID列,只需要columnName=“”就可以了。
for (int i = 0; i < dt.Columns.Count; i++)
{
columnName += dt.Columns[i].ColumnName + ",";
string currentColumn = dt.Columns[i].ToString().ToUpper(); //当前列名
for (int j = 0; 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 - 1)
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 = 0; h < dt.Rows.Count; h++)
{
string value = "'" + System.Guid.NewGuid().ToString() + "'" + ","; //如果ID自动递增ID列不需要增加了,那么value的初始值只需要value=“”就可以了。
for (int k = 0; k < dt.Columns.Count; k++) //根据列名得到值
{
value += "'" + dt.Rows[h][k].ToString() + "'" + ",";
}
value = value.Remove(0, 1);
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.ACE.OLEDB.12.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 [库存数量$]";
DataTable dt;
try
{
Conn.Open();
System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(strCom, Conn);
DataSet ds = new DataSet();
myCommand.Fill(ds, "[库存数量$]");
Conn.Close();
dt = ds.Tables[0];
}
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(0).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(0));
}
}
finally
{
sqlcon.Close();
}
return al; //返回的是表中的字段
}
public enum ImportState
{
right = 1, //成功
tableNameError = 2,//表名不存在
fieldMatchError = 3,//excel里的字段和数据库表里的字段不匹配
dataTypeError = 4, //转换数据类型时发生错误
excelFormatError = 5,//Excel格式不能读取
}
public void Alert(string str)
{
HttpContext.Current.Response.Write("<script language='javascript'>alert('" + str + "');</script>");
}
}
EXECL文件导入数据库的更多相关文章
- 读取Execl表 导入数据库
不知不觉博客园园林都两年多了,我是今年毕业的应届生,最近公司项目需要改动,很多的数据需要导入,很多的实体类需要些.考虑到这些问题自己写了两个winform版的小工具,一个是读取Execl数据导入数据库 ...
- C# ASP.NET CSV文件导入数据库
原文:C# ASP.NET CSV文件导入数据库 using System; using System.Collections.Generic; using System.Text; using Sy ...
- 【DRP】採用dom4j完毕XML文件导入数据库
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/lantingxv_jing/article/details/37762523 xml文件在如 ...
- 将.dat文件导入数据库
*最近在搞文本分类,就是把一批文章分成[军事].[娱乐].[政治]等等. 但是这个先需要一些样本进行训练,感觉文本分类和"按图索骥"差不多,训练的文章样本就是"图&quo ...
- PHP读取CSV大文件导入数据库的示例
对于数百万条数据量的CSV文件,文件大小可能达到数百M,如果简单读取的话很可能出现超时或者卡死的现象. 为了成功将CSV文件里的数据导入数据库,分批处理是非常必要的. 下面这个函数是读取CSV文件中指 ...
- CSV文件导入数据库和导出数据库
实例一: <?php $filename = 'test'; //导出文件 header("Content-type: application/vnd.ms-excel; charse ...
- 记tp5.1使用composer PhpOffice的xlsx表格文件导入数据库
在项目环境下composer require phpoffice/phpspreadsheet在项目中引用use PhpOffice\PhpSpreadsheet\IOFactory; 下面是 上传x ...
- mongodb csv 文件导入数据库,删除特定字段
1. 导入数据库 mongoimport -h host_ip -p port -d db_name -c collection_name --fields name1,name2,name3,nam ...
- 《mysql必知必会》学习_sql文件导入数据库_20180724_欢
解决问题1:MySQL中导入sql文件. 步骤1:show databases;#看看我有什么数据库 步骤2:use hh;#我要用hh这个数据库,返回database changed说明打开成功. ...
随机推荐
- 百度分页样式代码 css+c#
通过c#输出html分页代码: /// <summary> /// 返回分页Html代码 /// </summary> /// <param name="pag ...
- ASP.NET MVC5--Contains
前言: * The Contains method is run on the database, not the c# code above. On the database, Contains ...
- 怎样计算一个整数的位数&并把每一位上的数字保存下来
用循环来解决~~ M每次除以10, 再用一个变量count来计数,每循环一次 加1,直到这个数除去10后的数小于10 ,count再加1就可以了 实例:整数M=4325, 第一次:4325/10=43 ...
- c# 文件另存为代码
利用.NET中的File.Copy方法 命名空间:System.IO 重载列表:Copy(string sourceFilePath,string targetFilePath) sourceFile ...
- C#获取url中参数键值对的方法
方法如下: /// <summary> /// 遍历Url中的参数列表 /// </summary> /// <returns>如:(?userName=keley ...
- 使用mvc3实现ajax跨域
ajax跨域一般两种方式 1:cors,2:jsonp, 1:cors jsonp是get形式,承载的信息量有限,所以信息量较大时CORS是不二选择 在请求消息头添头 Access-Control ...
- Winform调用QQ发信息并且开机启动 (开源)
前言 公司CS系统需要加入启动qq从winform调用qq聊天窗口的功能,前提是需要将聊天者的QQ号码作为参数传递到函数中,一直没有搞过,正好很感兴趣,就折腾,Winform调用qq,我想肯定是需要一 ...
- SystemClock.sleep和Thread.sleep的区别(转)
在Java中我们处理线程同步问题时,处理延迟可能会使用Thread类的sleep方法,这里抛开concurrent类的一些方法,其实 Android平台还提供了一个SystemClock.sleep方 ...
- HTML Jquery
在<网页制作Dreamweaver(悬浮动态分层导航)>中,运用到了jQuery的技术,轻松实现了菜单的下拉.显示.隐藏的效果,不必再用样式表一点点地修改,省去了很多麻烦,那么jQuery ...
- mustache模板渲染的基本原理
mustache.js是一个模板引擎,为开发节省了大量的“人力”,对于初学者,我是从这篇 和这篇 博客接触的,算是对mustache有了初步认识,不得不承认自己还是菜鸟阶段还有太多东西要学,慢慢熟悉. ...