本文利用Visual Studio 2017 C#编写一个简单的WEB程序发布和部署到局域网内,目的是实现:在局域网内任意一台未安装OFFICE办公软件的电脑上打开浏览器后在地址栏输入IP地址和端口号,即可链接到WEB网页,点击【导出到EXCEL文件】按钮,即可实现将MySQL数据库中的数据通过NPOI导出到EXCEL文件中。
(1)、说明:我的电脑在局域网中IP地址为192.168.16.157,另外局域网的端口号为5000。打开浏览器,在地址栏输入
http://192.168.16.157:5000/
即可弹出如下的WEB网页。
(2)、如何查看我的电脑在局域网中的IP地址
第一步:进入命令提示符窗口
第二步:输入 IPCONFIG
上图中,IPV4地址后面的 192.168.16.157 就是我的这台电脑在局域网中的IP地址
1、请参阅博主另外一篇文章:https://blog.csdn.net/ba_wang_mao/article/details/105242831
2、还可以参考这个博主的文章《Win10下IIS配置图解、MVC项目发布图解、IIS添加网站图解 》
https://www.cnblogs.com/zhao123/p/5588888.html
3、还可以参考这个博主的文章《Windows10下安装IIS并发布网站》
https://jingyan.baidu.com/article/ceb9fb1074357b8cac2ba058.html
4、还可以参考这个博主的文章《Win10下IIS配置、项目发布、添加网站》
https://blog.csdn.net/qq_22642239/article/details/77006831?utm_source=blogxgwz1
5、还可以参考这个博主的文章《Win10下IIS配置、项目发布、添加网站》
https://blog.csdn.net/zgscwxd/article/details/88838807
1、鼠标单击引用
2、弹出引用管理器窗口
单击浏览,找到MySQL数据库,参见下图(前提是你已经安装好MySQL数据库系统)。左边打勾,然后单击确定按钮。
可以观察到,在引用下多了MySql.Data,表示添加成功。
安装完毕,可在右边的【引用】中观察到MySQL库,即:MySql.Data。
当目标电脑没有安装OFFICE办公软件时,要想将MySQL库中的数据导出到EXCEL文件,最好的办法是使用NPOI组件,NPOI组件可以让你在没有安装OFFICE办公软件的环境下将MySQL库中的数据导出到EXCEL文件。
有2种途径下载NPOI控件,方法1是在官网下载。方法2是利用Visual Studio 2017的NuGet包管理器。
下面我们介绍第2种方法,利用Visual Studio 2017的NuGet包管理器下载,可以直接下载到DLL库,而且版本是最新的。
鼠标点击【浏览】,在输入框中输入NPOI,会在下面出现NPOI下载项(我下载的时候NPOI最新版本为V2.5.1)。
鼠标选中NPOI下载项,右边会出现【版本:】和【安装】。【版本:】下拉菜单找到最新稳定版2.5.1,然后鼠标单击【安装】
安装完毕,可在右边的【引用】中观察到NPOI库,包括: LCSharpCode.SharpZIPLib,NPOI,NPOI.OOXML,
NPOI.OpenXml4Net,NPOI.OpenXmlFormats。
1、在WebForm1.aspx中添加一个按钮,命名为btnExport,按钮文本为“导出到EXCEL”。
2、在WebForm1.aspx.cs中编写代码
(1)、一定要添加MySQL的命名空间
using MySql.Data.MySqlClient;(2)、一定要添加NPOI的命名空间
using NPOI; using NPOI.SS.UserModel; using NPOI.HSSF.UserModel; using NPOI.XSSF.UserModel;(3)、添加程序代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using MySql.Data.MySqlClient; using NPOI; using NPOI.SS.UserModel; using NPOI.HSSF.UserModel; using NPOI.XSSF.UserModel; namespace WebApplication1 { public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnExport_Click(object sender, EventArgs e) { string constr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306";//声明一个字符串用来存放连接数据库的信息 //string sql = "select * from Brand";//声明一个字符串,用来存放查询数据库表语句 MySqlConnection con = new MySqlConnection(constr);//创建一个SqlConnection对象,由于我使用的是MySQL数据库,因此注意要引用using MySql.Data.MySqlClient; try //将可能出错的语句放在try语句里 { con.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.Connection = con; cmd.CommandText = "select * from Brand where BrandId>=1 && BrandId <=3"; //声明一个字符串,用来存放查询数据库表语句 MySqlDataReader reader = cmd.ExecuteReader(); DataTable dt = ReaderToTable(reader); ExportExcel(dt); con.Close(); con.Dispose(); cmd.Dispose(); reader.Close(); dt.Dispose(); } catch (Exception ex) { Response.Write(ex.Message); } finally { con.Close();//关闭数据库连接 } } protected DataTable ReaderToTable(MySqlDataReader dr) { DataTable dt = new DataTable(); for (int i = 0; i < dr.FieldCount; i++) { dt.Columns.Add(dr.GetName(i), dr.GetFieldType(i)); } object[] objValues = new object[dr.FieldCount]; while (dr.Read()) { dr.GetValues(objValues); dt.LoadDataRow(objValues, true); } dr.Close(); return dt; } protected void ExportExcel(DataTable dt) { HttpContext curContext = HttpContext.Current; //设置编码及附件格式 curContext.Response.ContentType = "application/vnd.ms-excel"; curContext.Response.ContentEncoding = Encoding.UTF8; curContext.Response.Charset = ""; string fullName = HttpUtility.UrlEncode("FileName.xls", Encoding.UTF8); curContext.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fullName, Encoding.UTF8)); //attachment后面是分号 byte[] data = TableToExcel(dt, fullName).GetBuffer(); curContext.Response.BinaryWrite(TableToExcel(dt, fullName).GetBuffer()); curContext.Response.End(); } public MemoryStream TableToExcel(DataTable dt, string file) { //创建workbook IWorkbook workbook; string fileExt = Path.GetExtension(file).ToLower(); if (fileExt == ".xlsx") workbook = new XSSFWorkbook(); else if (fileExt == ".xls") workbook = new HSSFWorkbook(); else workbook = null; //创建sheet ISheet sheet = workbook.CreateSheet("Sheet1"); //表头 IRow headrow = sheet.CreateRow(0); for (int i = 0; i < dt.Columns.Count; i++) { ICell headcell = headrow.CreateCell(i); headcell.SetCellValue(dt.Columns[i].ColumnName); } //表内数据 for (int i = 0; i < dt.Rows.Count; i++) { IRow row = sheet.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) { ICell cell = row.CreateCell(j); cell.SetCellValue(dt.Rows[i][j].ToString()); } } //转化为字节数组 MemoryStream ms = new MemoryStream(); workbook.Write(ms); ms.Flush(); ms.Position = 0; return ms; } } }程序代码发现如下错误
(4)、添加using System.Data;后DataTable错误消失。
using System.Data;(5)、添加using System.Text; 后Encoding错误消失。
using System.Text;(6)、添加using System.IO; 后Path和MemoryStream错误消失。
using System.IO;(7)、把按钮btnExport的关联由Page_Load修改为btnExport_Click,参见下图
(8)、完整的源程序如下
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using MySql.Data.MySqlClient; using NPOI; using NPOI.SS.UserModel; using NPOI.HSSF.UserModel; using NPOI.XSSF.UserModel; using System.Data; using System.Text; using System.IO; namespace WebApplication1 { public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnExport_Click(object sender, EventArgs e) { string constr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306";//声明一个字符串用来存放连接数据库的信息 //string sql = "select * from Brand";//声明一个字符串,用来存放查询数据库表语句 MySqlConnection con = new MySqlConnection(constr);//创建一个SqlConnection对象,由于我使用的是MySQL数据库,因此注意要引用using MySql.Data.MySqlClient; try //将可能出错的语句放在try语句里 { con.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.Connection = con; cmd.CommandText = "select * from Brand where BrandId>=1 && BrandId <=3"; //声明一个字符串,用来存放查询数据库表语句 MySqlDataReader reader = cmd.ExecuteReader(); DataTable dt = ReaderToTable(reader); ExportExcel(dt); con.Close(); con.Dispose(); cmd.Dispose(); reader.Close(); dt.Dispose(); } catch (Exception ex) { Response.Write(ex.Message); } finally { con.Close();//关闭数据库连接 } } protected DataTable ReaderToTable(MySqlDataReader dr) { DataTable dt = new DataTable(); for (int i = 0; i < dr.FieldCount; i++) { dt.Columns.Add(dr.GetName(i), dr.GetFieldType(i)); } object[] objValues = new object[dr.FieldCount]; while (dr.Read()) { dr.GetValues(objValues); dt.LoadDataRow(objValues, true); } dr.Close(); return dt; } protected void ExportExcel(DataTable dt) { HttpContext curContext = HttpContext.Current; //设置编码及附件格式 curContext.Response.ContentType = "application/vnd.ms-excel"; curContext.Response.ContentEncoding = Encoding.UTF8; curContext.Response.Charset = ""; string fullName = HttpUtility.UrlEncode("FileName.xls", Encoding.UTF8); curContext.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fullName, Encoding.UTF8)); //attachment后面是分号 byte[] data = TableToExcel(dt, fullName).GetBuffer(); curContext.Response.BinaryWrite(TableToExcel(dt, fullName).GetBuffer()); curContext.Response.End(); } public MemoryStream TableToExcel(DataTable dt, string file) { //创建workbook IWorkbook workbook; string fileExt = Path.GetExtension(file).ToLower(); if (fileExt == ".xlsx") workbook = new XSSFWorkbook(); else if (fileExt == ".xls") workbook = new HSSFWorkbook(); else workbook = null; //创建sheet ISheet sheet = workbook.CreateSheet("Sheet1"); //表头 IRow headrow = sheet.CreateRow(0); for (int i = 0; i < dt.Columns.Count; i++) { ICell headcell = headrow.CreateCell(i); headcell.SetCellValue(dt.Columns[i].ColumnName); } //表内数据 for (int i = 0; i < dt.Rows.Count; i++) { IRow row = sheet.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) { ICell cell = row.CreateCell(j); cell.SetCellValue(dt.Rows[i][j].ToString()); } } //转化为字节数组 MemoryStream ms = new MemoryStream(); workbook.Write(ms); ms.Flush(); ms.Position = 0; return ms; } } }编译程序
在本机上运行
下面是在本机上运行WEB程序,点击【导出到EXCEL文件】将数据库中的数据导出到EXCEL文件的截屏
到这里一个简单的demo 接口就完成了
弹出选取发布目标窗口
先点击文件夹,然后点击创建配置文件(P)
先点击文件夹,然后点击创建配置文件(P)会弹出如下窗口,然后点击新建配置文件
然后点击新建配置文件,又会弹出选取发布目标窗口。
先点击文件夹,然后点击创建配置文件(P),在下面的下拉窗口中选择【立即发布】
发布成功
发布完成后,D:\WEB\WebApplication1\WebApplication1\bin\Release\Publish中存放的是发布的内容。
注意:我在发布时设置的路径为 bin\Release\Publish
将WEB网页部署在我的电脑上,让局域网内任意一台电脑访问。
1、此电脑点击右键,弹出下拉菜单,选择管理(G)
2、打开【IIS管理器】
3. 添加网址:单击【网站】,【添加网站】
网站名称随便起,物理路径为项目发布的路径。这里的端口需要注意,不要起已经被占用的端口。注意:我在发布时设置的路径为 bin\Release\Publish
在网站名称(S):的输入框中输入 WebExcel ,说明网站名称可随意输入,你想怎么命名就怎么命名,输了网站名称后,后面的【应用程序池(L):】中的输入框中自动出现了网站名称WebExcel
由于我之前发布网站时发布到了D:\WEB\WebApplication1\WebApplication1\bin\Release\Publish,因此物理路径(P):必须添加上述路径。
由于局域网服务器的端口号为5000,我的电脑在局域网中的IP地址为192.168.16.157,我需要将WEB网页发布到我的电脑上,好让局域网上其它电脑访问WEB网页。
点击【确定】按钮,返回计算机管理窗口
鼠标单击右边的【浏览网站 浏览192.168.16.157:5000】,弹出如下错误信息
HTTP错误 403.14 - Forbidden 错误的解决方法,参见:https://blog.csdn.net/weixin_43481571/article/details/83690182
1、当然导致这个问题出现的原因可能很多,但在本地运行调试,不至于存在IP被列入黑名单、网站域名解析到了空间、被防火墙拒绝访问等原因,所以问题重点应 IIS 管理器上!
2.至于怎样配置安装ISS的这里就不说了,我们打开 IIS 管理器,转到自己定义好的页面上!
3.在”功能视图“,中找到【目录浏览】双击进入,或者单击【目录浏览】,然后单击【打开功能】
单击【启用】
单击【启用】后,参见下图
4.这时候返回ISS管理器的主页面
选择浏览网站(浏览192.168.16.157:5000),重新找自己网站,可以看到已经不报错了,但是只是以文件目录的形式!参见下图
5.我们希望的是浏览演示网站内容,这个才能直观的调试,其实这里我们只要设置好默认文档就就可以了!
6.重新回到IIS管理器主页,在”功能视图“中,选择”默认文档“!
7.在默认文档中默认的主页名称是default.aspx,而我的主页名称是WebForm1.aspx
点击【添加】,弹出【添加默认文档】对话框
我的主页名称是WebForm1.aspx,在上图的名称(N):输入WebForm1.aspx,然后单击【确定】按钮
7.再重新打开我们网站,就可以正常打开运行了
重新回到IIS管理器主页,鼠标单击右边的【浏览网站 浏览192.168.16.157:5000】
鼠标单击右边的【浏览网站 浏览192.168.16.157:5000】后,终于跳出了我的WEB主页。
1、局域网内随便找一台电脑,打开浏览器,在地址栏输入 192.168.16.157:5000/
2、弹出WEB主页
3、单击【导出到EXCEL文件】,弹出【正在打开FileName.xls】对话框,点击【保存文件(S)】,然后点击【确定】按钮
4、过一会可以在这台电脑的下载文件夹中观察到导出的EXCEL文件(FileName.xls)
5、打开FileName.xls,可以观察到就是我们按照我们的查询要求导出的数据库中的数据。
致谢以下文章,是它们让我从一个C#小白,对WEB一无所知,到如今顺利编写完程序,并发布成功网页,并部署到服务器,最后在局域网任意一台电脑上都可以浏览。
https://blog.csdn.net/zhengfwei/article/details/79011183
https://blog.csdn.net/jhycjhyc/article/details/97115003?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.edu_weight&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.edu_weight
Win 10 ASP.NET网站从创建到发布(VS2017)
https://blog.csdn.net/qq_42862167/article/details/100803240
使用VisualStudio发布ASP.NET网站
https://www.cnblogs.com/Van-Pire/p/4147180.html
win8 iis安装及网站发布(转)
https://www.cnblogs.com/Van-Pire/p/4147217.html
win8 iis安装及网站发布
https://www.cnblogs.com/molong/archive/2013/03/22/2975841.html
IIS发布网站后局域网其他用户不能访问问题(转)
https://www.cnblogs.com/Van-Pire/p/4146928.html
为什么IIS中找不到.net framework 4.5(转)
https://www.cnblogs.com/Van-Pire/p/4146787.html
windows8 安装IIS 和 添加网站(转)
https://www.cnblogs.com/Van-Pire/p/4146988.html
IIS发布网站:CS0016: 未能写入输出文件的解决方法
https://www.cnblogs.com/Van-Pire/p/4146751.html
微软公司---使用 Visual Studio 的 ASP.NET Web 部署:部署到测试
https://docs.microsoft.com/zh-cn/aspnet/web-forms/overview/deployment/visual-studio-web-deployment/deploying-to-iis
Visual Studio 2017(C#)、Microsoft Access 2010搭建ASP.NET网站(页面功能概述一)
https://www.pianshen.com/article/9912830590/
Visual Studio 2017安装教程
https://www.pianshen.com/article/67531099732/
HTTP错误 403.14 - Forbidden 错误的解决方法
https://blog.csdn.net/weixin_43481571/article/details/83690182
win10 IIS网站部署实录
https://blog.csdn.net/u014255803/article/details/73832072
win10 配置 IIS
https://blog.csdn.net/kdt602/article/details/73650262