WIN10操作系统 Visual Studio 2017 C# ASP.net Web 简单接口+MySQL数据库+NPOI导出到EXCEL开发、发布及部署到局域网详细教程(一)

    技术2022-07-11  86

            本文利用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地址

     

    一、WIN10操作系统开启IIS服务

    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

    二、创建项目ASP.net Web 应用程序 

     

    二、创建一个Web窗体 

     三、添加MySQL数据库

     1、鼠标单击引用

    2、弹出引用管理器窗口

    单击浏览,找到MySQL数据库,参见下图(前提是你已经安装好MySQL数据库系统)。左边打勾,然后单击确定按钮。

    可以观察到,在引用下多了MySql.Data,表示添加成功。

    安装完毕,可在右边的【引用】中观察到MySQL库,即:MySql.Data。 

      四、下载NPOI组件

            当目标电脑没有安装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

    七、在局域网内我的电脑上部署(在IIS上添加网址)

    将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

            有很多人在用服务器发布网站的时候,一直出现 “HTTP 错误 403.14 - Forbidden Web  服务器被配置为不列出此目录的内容“,那么是什么原因引起的呢!

          方法/步骤

          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主页。

    八、在局域网内其它电脑上访问WEB网页,并实现MYSQL数据库导出到EXCEL文件

    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

    Processed: 0.013, SQL: 9