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

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值