未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。(C# EXCEL导入demo)
1. 安装office包
https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=13255
2.需要在相应的IIS应用程序池启用32位应用程序
3.代码
//前台
<script language="javascript">
$(document).ready(function () {
$('#ImportExcel').on('click', function (e) {
console.log($(this).next().attr("data-id"));
$(this).next().trigger('click'); })
})
function Upload(obj) {
var file = obj.files[0];
var formData = new FormData();
formData.append('imgFile', file);
formData.append('type', "carCheckUpload");
$.ajax({
url: "/ajax/ajax_caruseexport.ashx",
type: "post",
data: formData,
contentType: false,
processData: false,
mimeType: "multipart/form-data",
success: function (data) {
var jsondata = $.parseJSON(data);
console.log(jsondata);
alert('导入成功');
window.location.reload();
},
error: function (data) {
alert("上传失败");
}
});
}
</script> <div class="lf">
<div class="div1" style="margin-left: 15px;">
<a href="/Upload/公车检查台账导入表.xls">模板下载</a>
</div>
<div class="div1" style="margin-left: 15px;">
<a id="ImportExcel">公车检查台账导入</a>
<input style="display: none;" type="file" onchange="Upload(this)" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" />
</div> </div>
//后台处理程序
<%@ WebHandler Language="C#" Class="ajax_caruseexport" %> using System;
using System.Collections;
using System.Web;
using System.IO;
using System.Globalization;
using LitJson;
using System.Collections.Generic;
using System.Data;
using System.Text.RegularExpressions;
using System.Data;
using System.Data.OleDb;
using System.Data.Linq.SqlClient;
using System.Linq; public class ajax_caruseexport : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
private HttpContext context;
BaseService bs = new BaseService(); public void ProcessRequest(HttpContext context)
{
this.context = context;
int maxSize = 1000000000;
String savePath = "/Upload/" + DateTime.Now.ToString("yyyy") + "/" + DateTime.Now.ToString("yyyyMM") + "/"; Hashtable extTable = new Hashtable();
extTable.Add("file", "doc,docx,xls,xlsx,ppt,pptx,txt,zip,rar,gz,bz2");
HttpPostedFile imgFile = context.Request.Files["imgFile"]; if (imgFile == null) showError("请选择文件。");
String dirName = context.Request.QueryString["dir"];
if (String.IsNullOrEmpty(dirName)) dirName = "file";
if (!extTable.ContainsKey(dirName)) showError("目录名不正确。");
String fileName = imgFile.FileName;
String fileExt = Path.GetExtension(fileName).ToLower(); if (imgFile.InputStream == null || imgFile.InputStream.Length > maxSize) showError("上传文件大小超过限制。");
if (String.IsNullOrEmpty(fileExt) || Array.IndexOf(((String)extTable[dirName]).Split(','), fileExt.Substring(1).ToLower()) == -1) showError("上传文件扩展名是不允许的扩展名。\n只允许" + ((String)extTable[dirName]) + "格式。"); if (!Directory.Exists(context.Server.MapPath(savePath))) Directory.CreateDirectory(context.Server.MapPath(savePath)); String newFileName = "meeting_" + DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + fileExt;
String fileUrl = savePath + newFileName; imgFile.SaveAs(context.Server.MapPath(fileUrl));
if (!(IsAllowedExtension(fileUrl))) showError("非法文件!请上传正确的文件!");
var msg = ImportUser(context, context.Server.MapPath(fileUrl)); Hashtable hash = new Hashtable();
hash["error"] = 0;
hash["url"] = fileUrl;
hash["msg"] = msg;
context.Response.AddHeader("Content-Type", "text/html; charset=UTF-8");
context.Response.Write(JsonMapper.ToJson(hash));
context.Response.End();
} private void showError(string message)
{
Hashtable hash = new Hashtable();
hash["error"] = 1;
hash["message"] = message;
context.Response.AddHeader("Content-Type", "text/html; charset=UTF-8");
context.Response.Write(JsonMapper.ToJson(hash));
context.Response.End();
} //文件真实性判断
private bool IsAllowedExtension(string FileUrl)
{
System.IO.FileStream fs = new System.IO.FileStream(context.Server.MapPath(FileUrl), System.IO.FileMode.Open, System.IO.FileAccess.Read);
System.IO.BinaryReader r = new System.IO.BinaryReader(fs);
string fileclass = "";
byte buffer;
buffer = r.ReadByte();
fileclass = buffer.ToString();
buffer = r.ReadByte();
fileclass += buffer.ToString();
r.Close();
fs.Close();
/* 文件扩展名说明
*7173 gif
*255216 jpg
*13780 png
*6677 bmp
*/
Dictionary<String, String> ftype = new Dictionary<string, string>();
//添加允许的文件类型
ftype.Add("7173", "gif");
ftype.Add("255216", "jpg");
ftype.Add("13780", "png");
ftype.Add("6677", "bmp");
ftype.Add("8297", "rar");
ftype.Add("208207", "doc"); ftype.Add("3780", "pdf");
ftype.Add("8075", "xlsx"); if (ftype.ContainsKey(fileclass))
{
return true;
}
else
{
System.IO.File.Delete(context.Server.MapPath(FileUrl));
return false;
} } /// <summary>
/// 导入通讯录
/// </summary>
/// <param name="context"></param>
/// <param name="filePath"></param>
/// <returns></returns>
public string ImportUser(HttpContext context, string filePath)
{
var result = "";
string type = context.Request["type"];
if (type == "carCheckUpload")
{
DataTable dt = ExcelToDataTable(filePath);
BaseHelper.WriteLogs("ImportCarCheck", Newtonsoft.Json.JsonConvert.SerializeObject(dt) + "--" + dt.Rows.Count, "Import");
if (dt.Rows.Count > 3)
{
var firstRow = dt.Rows[1]; //第一行是检查人数据
DateTime nowTime = DateTime.Now;
for (int i = 3; i < dt.Rows.Count; i++)
{
CarUseCheckRegistration entity = new CarUseCheckRegistration()
{
carName = dt.Rows[i][0].ToString(),
brand = dt.Rows[i][1].ToString(),
linkMan = dt.Rows[i][2].ToString(),
linkTel = dt.Rows[i][3].ToString(),
company = dt.Rows[i][4].ToString(),
terminal = dt.Rows[i][5].ToString(),
endTime = dt.Rows[i][6].ToString(),
isUsually = dt.Rows[i][7].ToString(),
isRegularPark = dt.Rows[i][8].ToString(),
remark = dt.Rows[i][9].ToString(),
status = 1,
createtime = nowTime,
};
//保存
BLL_PublicCar.SaveCarUseCheckRegistration(entity);
} ImageInfo imageInfo = new ImageInfo()
{
ClassId = 520,
Title = firstRow[3] + "",
Content = firstRow[1] + "",
};
using (SiteCmsDataContext db = new SiteCmsDataContext())
{
var temp = db.ImageInfo.Where(w => w.ClassId == imageInfo.ClassId).FirstOrDefault();
if (temp == null)
{
db.ImageInfo.InsertOnSubmit(imageInfo);
db.SubmitChanges();
}
else
{
if (imageInfo.Title.IsNotNullOrEmpty())
{
temp.Title = imageInfo.Title;
}
if (imageInfo.Content.IsNotNullOrEmpty())
{
temp.Content = imageInfo.Title;
}
temp.ClassId = imageInfo.ClassId;
db.SubmitChanges();
}
}
}
}
return result;
} public DataTable ExcelToDataTable(string strExcelFileName)
{
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataSet ds = new DataSet();
OleDbDataAdapter adapter = new OleDbDataAdapter("select * from [" + GetExcelFirstTableName(strExcelFileName) + "]", strConn);
adapter.Fill(ds);
conn.Close();
return ds.Tables[0];
} public string GetExcelFirstTableName(string excelFileName)
{
string tableName = null;
if (File.Exists(excelFileName))
{
using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=\"Excel 8.0\";Data Source=" + excelFileName))
{
conn.Open();
DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
tableName = dt.Rows[0][2].ToString().Trim();
}
}
return tableName;
} public bool IsReusable
{
get
{
return false;
}
}
}
未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。(C# EXCEL导入demo)的更多相关文章
- .NET读取Excel数据,提示错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
解决.NET读取Excel数据时,提示错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序的操作: 1. 检查本机是否安装Office Access,如果未安装去去h ...
- 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序
这种错误的可能性有几种,比如: 1.没有安装数据访问组件,需要安装相应版本的数据访问组件: 2.没有安装相应版本的Office客户端,需要安装相应版本的Office客户端: 3.Microsoft.J ...
- 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序 解决方法
最近在搞asp.net.今天在做数据库操作的时候,老发生错误,还以为是自己代码有问题,检查了好久都发现错误. 错误提示: 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程 ...
- 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法
一.未在本地计算机上注册“microsoft.ACE.oledb.4.0”提供程序 http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c ...
- 未在本地计算机上注册"microsoft.ACE.oledb.12.0"提供程序解决办法
错误信息:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序. 解决办法: 去http://download.microsoft.com/download/7/0/3/7 ...
- 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。
笔记本装的是windows 7旗舰版64位系统,使用的是MS Office 2007(Microsoft.ACE.OLEDB.12.0,32位程序),开发用的是Visual Studio 2010,我 ...
- c#操作Excel时,抛出异常:“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”
我们开发环境下,使用excel导入数据到数据库中,编译的软件起初是x86 方式,起初并未发现什么问题,一切很正常: 程序该进的过程: 后来导入文件一次就要读取几百G的数据导入数据库中,使用编译的X86 ...
- 未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序(Oledb)
解决访问Excel数据源时出现 未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序1.确保安装了Microsoft.ACE.OLEDB.12.0驱动 http://downl ...
- 未在本地计算机上注册"Microsoft.ACE.OLEDB.12.0"提供程序
运行时出现了错误,提示未在本地计算机上注册"Microsoft.ACE.OLEDB.12.0"提供程序. 这个问题的原因是64位PC上安装了Office的32位版本,所以Micro ...
- 【.net】未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法
#错误描述: 在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错: “未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序” # ...
随机推荐
- 如何发布一个 TypeScript 编写的 npm 包
前言 在这篇文章中,我们将使用TypeScript和Jest从头开始构建和发布一个NPM包. 我们将初始化一个项目,设置TypeScript,用Jest编写测试,并将其发布到NPM. 项目 我们的库称 ...
- MySQL视图-触发器
目录 一:视图 1.什么是视图? 2.为什么要用视图? 3.如何使用视图 4.反复拼接的繁琐(引入视图的作用) 5.解决方法 二:视图的应用 1.创建视图的格式: 2.查询视图层 3.查询Navica ...
- [ 赛后总结 ] CSP-J 2022
前言 今年没考好,估分 100+60+0+10=170pts ,大概能混个2=,没什么用. 这下好了,期中也砸了,已经排到全校 30 开外了,果然鱼和熊掌不可兼得,况且我双双落空,接下来怕是想搞也搞不 ...
- 【转载】SQL SERVER 中单字节和双字节互转自定义函数(全角半角转换)
一.首先创建一个自定义函数,代码如下: alter function f_convert( @str nvarchar(4000), --要转换的字符串 @flag bit --转换标志,0转换成半角 ...
- 【运维笔录】局域网实现项目的CI/CD,Docker+Gitea+Drone搭建轻量级自动化部署平台
一.安装Docker 1.1 安装excpet $ apt-get -f install expect 1.2 编写执行Docker安装脚本 编写docker_dep.exp脚本 #!/usr/bin ...
- [OpenCV实战]33 使用OpenCV进行Hough变换
目录 1 什么是霍夫变换 1.1 应用霍夫变换以检测图像中的线条 1.2 累加器 1.3 线条检测 1.4 圆环的检测 2 代码 3 参考 1 什么是霍夫变换 霍夫变换是用于检测图像中的简单形状(诸如 ...
- 算法之SPFA的前置:Bellman-Ford算法
SPFA 我们都知道一个叫SPFA的算法,它是用来计算单源最短路径的,但是,众所周知它不是很稳定,容易退化. SPFA是基于什么被提出的? 基于一个叫做Bellman-Ford的算法. Bellman ...
- 手把手教你使用HBuilderX调试项目-windows系统
准备工作 一个可以运行的uniapp项目 HBuilderX工具 官方 IDE 下载地址 快速上手 step1: 安装 HBuilderX 官方 IDE 下载地址 step2: 双击运行HBuilde ...
- VUE Angular通用动态列表组件-亦可为自动轮播组件-01-根据数据量自动纵向滚动,鼠标划入停止滚动
本文为纵向轮播,横向轮播/动态列表组件请戳---- 代码是angular的,稍微改改就可以放入Vue项目里,差别不大哟 以下代码可以根据实际情况自行调整 父组件html <app-scroll- ...
- 动力节点——day02
ipconfig ip地址的配置信息,ipconfig -all 更详细的配置信息 查看两台计算机是否可以正常通信 ping ip地址/域名(-t) 快捷键:ctrl+c复制 ctrl+v粘贴 c ...