前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Companys公司表的增删该查功能实现

Companys公司表的增删该查功能实现

作者头像
静心物语313
发布2020-03-24 14:52:49
1.1K0
发布2020-03-24 14:52:49
举报

1、先在数据库实创建好表,并写下联合查询语句

select a.Name,a.Address,b.Name from Companys a left join Managers b on a.ManagerId=b.id;

2、如下图:

3、完成公司列表展示的html页面

代码语言:javascript
复制
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <a href="CompanyAddnewEdit.ashx?action=addnew">新增</a>
    <table style="border:1px solid ;margin:100px auto;border-color:blue;">
        <thead>
           <tr>
               <th>公司名称</th><th>公司地址</th><th>公司经理</th>
           </tr>
             $tables
        </thead>
    </table>
</body>
</html>

4、完成公司列表展示数据库查询,和进行字符串的拼接

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Web;
 
namespace Web1.Day3.cps
{
    /// <summary>
    /// CompanyList 的摘要说明
    /// </summary>
    public class CompanyList : IHttpHandler
    {
 
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            string html = CommonHelper.ReadHtml("~/Day3/cps/CompanyList.html");
            DataTable dt = SqlHelper.ExecuteQuery
                ("select a.Name Name,a.Address Address,b.Name MangerName from Companys a left join Managers b on a.ManagerId=b.id;");
            StringBuilder sb = new StringBuilder();
            //拼接$tables
            foreach (DataRow row in dt.Rows)
            {
                sb.Append("<tr>").Append("<td>").Append(row["Name"]).Append("</td>")
                                  .Append("<td>").Append(row["Address"]).Append("</td>")
                                  .Append("<td>").Append(row["MangerName"]).Append("</td>")
                    .Append("</tr>");
            }
            //替换$tables
            html = html.Replace("$tables",sb.ToString());
            //输出到浏览器
            context.Response.Write(html);
 
 
        }
 
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

5、对html页面添加内容

代码语言:javascript
复制
<thead>
           <tr>
               <th>公司名称</th><th>公司地址</th><th>公司经理</th><th>删除</th><th>编辑</th>
 
           </tr>
 
             $tables
 
        </thead>

6、对一般处理程序,进行“编辑”、“删除”内容的添加。问题:编辑的添加需要根据id值进行,所以这里要在数据库中查出来,公司表的id值。删除当然也要id;(着色为新添加的内容!!!!)

代码语言:javascript
复制
public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            string html = CommonHelper.ReadHtml("~/Day3/cps/CompanyList.html");
            DataTable dt = SqlHelper.ExecuteQuery
                ("select a.id id a.Name Name,a.Address Address,b.Name MangerName from Companys a left join Managers b on a.ManagerId=b.id;");
            StringBuilder sb = new StringBuilder();
            //拼接$tables
            foreach (DataRow row in dt.Rows)
            {
                sb.Append("<tr>").Append("<td>").Append(row["Name"]).Append("</td>")
                                  .Append("<td>").Append(row["Address"]).Append("</td>")
                                  .Append("<td>").Append(row["MangerName"]).Append("</td>")
                                  .Append("<td><a href='CompanyDelete.ashx?id=").Append(row["id"])
                                  .Append("'>删除</td>")
                                  .Append("<td><a href='CompanyAddnewEdit.ashx?action=edit&id=").Append(row["id"])
  
                                  .Append("'>编辑</td>")
                    .Append("</tr>");
            }
            //替换$tables
            html = html.Replace("$tables",sb.ToString());
            //输出到浏览器
            context.Response.Write(html);
        }

7、添加CompanyDelete.ashx一般处理程序

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
 
namespace Web1.Day3.cps
{
    /// <summary>
    /// CompanyDelete 的摘要说明
    /// </summary>
    public class CompanyDelete : IHttpHandler
    {
 
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            string strId = context.Request["id"];
            //做非空检查
            if (string.IsNullOrEmpty(strId))
            {
                CommonHelper.OutputError("id不能为空!");
                return;
            }
            //id的合法性
            int id;
            if (int.TryParse(strId,out id ))
            {
                CommonHelper.OutputError("id不是整数");
            }
           //做完检查,开始执行删除
            SqlHelper.ExecuteNonQuery("delete from Companys where id=@id",new SqlParameter("@id",id));
            context.Response.Redirect("CompanyList.ashx");
        }
 
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

8、添加页面的新增和编辑页面处理,这两个公用一个模板页CompanyAddnewEdit.html

代码语言:javascript
复制
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>公司#action</title>
</head>
<body>
    <form action="CompanySave.ashx" method="post">
        公司名称:<input type="text" name="name" value="#name" />
        公司地址:<input type="text" name="address" value="#address" />
        公司经理:<select name="managerId">
                    <!--<option value="llis"></option>-->
                    #manager
             </select>
 
    </form>
</body>
</html>

9、对页面进行处理CompanyAddnewEdit.ashx的一般处理程序;

A) 如何处理“新增”还是“编辑”;用action判读的;

public void ProcessRequest(HttpContext context)

{

context.Response.ContentType = "text/html";

//从url地址栏中读取action

string action=context.Request["action"];

if (action=="addnew")

{

//新增

}

else if (action == "edit")

{

//编辑

}

else

{

//action错误

}

A) 分析,新增不许要进行id的处理,因为id是自动增长的在数据库中。

B) 对于编辑就需要id的非空处理。

C) id的是否为整数的合法性处理。

D) 无论是新增还是删除都是需要 模板页CompanyAddnewEdit.html的读取

E) 调用封装好的类CommentHelper.ReadHtml();进行模板页中的指定值的替换;

10、asp.net引擎就是帮助我们做了html的拼接,如果和你希望的到的结果不一致,第一:想到的就是右键产看网页的源代码;

11、一般处理程序如下:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Web;
 
namespace Web1.Day3.cps
{
    /// <summary>
    /// CompanyAddnewEdit 的摘要说明
    /// </summary>
    public class CompanyAddnewEdit : IHttpHandler
    {
 
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            //1、从url地址栏中读取action
            string action=context.Request["action"];
            //3、无论”编辑“还是”新增“都需要读取模板页
            string html = CommonHelper.ReadHtml("~/Day3/cps/CompanyAddnewEdit.html");
            //5、查询公司的经理表
            DataTable td= SqlHelper.ExecuteQuery("select * from Managers;");
 
            //2、两种情况
            if (action=="addnew")
            {
                //新增
                //6、对经理表遍历人员信息进行,字符串的拼接生成<option values="id">雷军</option>
                StringBuilder sb = new StringBuilder();
                foreach (DataRow row in td.Rows)
                {
                    sb.Append("<option values='").Append(row["id"]).Append("'>").Append(row["Name"]).Append("</option>");
                }
 
                //4、值替换,对下拉列表需要查询Managers表 的id 值就是 values ,,,Name 值就是下拉列表中显示的名字
                html = html.Replace("#action","新增").Replace("#name", "").Replace("#address", "").Replace("#manager", sb.ToString());
                //7、把拼接好的sb的<option>替换在这里,,注意sb的ToString()
                //8、将所有的拼接好的都输出到浏览器张去
                context.Response.Write(html);
 
            }
            else if (action == "edit")
            {
                //编辑
            }
            else 
            {
                //action错误
                CommonHelper.OutputError("action错误!");
            }
 
            
        }
 
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

12、现在做编辑的功能;首先在这里进行id值的“非空”,“合法性”检查。

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Web;
 
namespace Web1.Day3.cps
{
    /// <summary>
    /// CompanyAddnewEdit 的摘要说明
    /// </summary>
    public class CompanyAddnewEdit : IHttpHandler
    {
 
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            //1、从url地址栏中读取action
            string action=context.Request["action"];
            //3、无论”编辑“还是”新增“都需要读取模板页
            string html = CommonHelper.ReadHtml("~/Day3/cps/CompanyAddnewEdit.html");
            //5、查询公司的经理表
            DataTable td= SqlHelper.ExecuteQuery("select * from Managers;");
 
            //2、两种情况
            if (action=="addnew")
            {
                //新增
                //6、对经理表遍历人员信息进行,字符串的拼接生成<option values="id">雷军</option>
                StringBuilder sb = new StringBuilder();
                foreach (DataRow row in td.Rows)
                {
                    sb.Append("<option values='").Append(row["id"]).Append("'>").Append(row["Name"]).Append("</option>");
                }
 
                //4、值替换,对下拉列表需要查询Managers表 的id 值就是 values ,,,Name 值就是下拉列表中显示的名字
                html = html.Replace("#action","新增").Replace("#name", "").Replace("#address", "").Replace("#manager", sb.ToString());
                //7、把拼接好的sb的<option>替换在这里,,注意sb的ToString()
                //8、将所有的拼接好的都输出到浏览器张去
                context.Response.Write(html);
 
            }
            else if (action == "edit")
            {
                //编辑
                //9、从报文Url中取出id,,因为报文中是字符串,,检验是否非空
                 string strId=context.Request["id"];
                 if (string.IsNullOrEmpty(strId))
                {
                    CommonHelper.OutputError("id不能为空!");
                    return;
                }
                 //10、该id不为空,进行数据查询该id的信息
                int id = Convert.ToInt32(context.Request["id"]);
                DataTable table = SqlHelper.ExecuteQuery("Select * from Companys where Id=@Id", new SqlParameter("@Id", id));
                //11、是否有该人id的记录
                if (table.Rows.Count <= 0)
                {
                    CommonHelper.OutputError("没找到id=" + id + "的公司");
                    return;
                }
                //12、或者该id有多条记录的出现呢
                if (table.Rows.Count > 1)
                {
                    CommonHelper.OutputError("找到多条id=" + id + "的公司");
                    return;
                }
                //13、来到这里说明,id已经完全的查出来了,对查出来的数据进行声明变量
                //14、实例化一个行
                DataRow row = table.Rows[0];
                string name=(string)row["Name"];
                string address = (string)row["Address"];
                int managerid=(int)row["ManagerId"];
                //15、得到变量进行字符串的替换
                //16、对于ManagerId需要处理,可以拷贝上边的代码
                StringBuilder sbMger = new StringBuilder();
                foreach (DataRow rowb in td.Rows)
                {
                    //18、对于ManagerId还需要考虑选中问题,,所以还要得到rowb行的id
                    //<option values="id">雷军</option>
                    //19、接着对这个id进行声明变量
                    int personId=(int)rowb["id"];
                    //20、如果这个id是这个经理的id就将id选中,添加selected
                    if (personId == managerid)
                    {   
                        sbMger.Append("<option values='").Append(personId).Append("'selected>").Append(rowb["Name"]).Append("</option>");
                    }
                    else
                    {
                        //20、如果这个id是这个经理的id就将id选中,否则就不添加selected
                        sbMger.Append("<option values='").Append(personId).Append("'>").Append(rowb["Name"]).Append("</option>");
                    }
                  
                }
 
 
                html = html.Replace("#action", "修改").Replace("#name", name).Replace("#address", address).Replace("#manager", sbMger.ToString());
                                                                                                                         //17、这里进行替换
                context.Response.Write(html);                  
 
            }                                                                                                        
 
            else 
            {
                //action错误
                CommonHelper.OutputError("action错误!");
            }
 
            
        }
 
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
}
}

13、添加隐藏域,(因为http连接不记得上次与浏览器发生了什么,所以要用隐藏域)做保存功能 ;

代码语言:javascript
复制
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>公司#action</title>
</head>
<body>
    <form action="CompanySave.ashx" method="post">
        <input type="hidden" name="action" value="{action}" />
        <input type="hidden" name="id" value="{id}" />
        公司名称:<input type="text" name="name" value="#name" />
        公司地址:<input type="text" name="address" value="#address" />
        公司经理:<select name="managerId">
                    <!--<option value="llis"></option>-->
                    #manager
             </select>
 
    </form>
</body>
</html>

15、添加隐藏域后对CompanyAddnewEdit.ashx 文件修改

代码语言:javascript
复制
html = html.Replace("#action", "新增").Replace("#name", "").Replace("#address", "")
                    .Replace("#manager", sb.ToString()).Replace("{action}", "addnew"); 

                html = html.Replace("#action", "修改").Replace("#name", name).Replace("#address", address)
                    .Replace("#manager", sbMger.ToString()).Replace("{action}", "edit").Replace("{id}",id.ToString());
                        //17、这里进行替换

16、编写CompanySave.ashx一般处理程序

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
 
namespace Web1.Day3.cps
{
    /// <summary>
    /// CompanySave 的摘要说明
    /// </summary>
    public class CompanySave : IHttpHandler
    {
 
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            //1、添加隐藏域,由action
            //2、读取action属性
            string action=context.Request["action"];
            string strName=context.Request["name"];
            string strAddress=context.Request["address"];
            int  valuesId =Convert.ToInt32(context.Request["managerId"]);
            //3、做检查
            if (string.IsNullOrEmpty(strName))
            {
                CommonHelper.OutputError("公司名称必填!");
                return;
            }
            if (string.IsNullOrEmpty(strName))
            {
                CommonHelper.OutputError("公司地址必填!");
                return;
            }
         
           
 
            //option默认都是显示的,所以这个不必判断
            //4、写if-------else------框架
            if (action=="addnew")
            {
                
 
                //5、执行插入
                SqlHelper.ExecuteNonQuery("insert into Companys(Name,Address,ManagerId) values(@Name,@Address,@ManagerId)"
                    ,new SqlParameter("@Name",strName)
                    , new SqlParameter("@Address",strAddress)
                    , new SqlParameter("@managerId", valuesId));//此时的MId才是整数类型
                context.Response.Redirect("CompanyList.ashx");
            }
            else if(action=="edit")
            {
                   //6、执行修改
                //7、拿到id
                int id = Convert.ToInt32(context.Request["id"]);
                //8、根据id修改
                SqlHelper.ExecuteNonQuery("Update Companys set Name=@Name,Address=@Address,ManagerId=@ManagerId where id=@id"
                    ,new SqlParameter("@Name",strName)
                    , new SqlParameter("@Address", strAddress)
                    , new SqlParameter("@managerId", valuesId)
                    ,new SqlParameter("@id",id));
                //9、修改完毕重定向
                context.Response.Redirect("CompanyList.ashx");
               
            }
            else
            {
                CommonHelper.OutputError("action错误!");
            }
        }
 
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

17、结果图:

18、总结遇到的问题:写代码不要丢字母!!!!

19、这里有个

代码语言:javascript
复制
<selected name=”selected” >
<option value=”1”>雷军1</option>
<option value=”1”>雷军2</option>
 
<option value=”1”>雷军3</option>
 
</selected>

还是html标记不熟练的问题。。。加油!

附录:1

USE [Persons]

GO

/****** Object: Table [dbo].[Managers] Script Date: 06/01/2015 19:00:50 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo].[Managers](

[id] [int] IDENTITY(1,1) NOT NULL,

[Name] [varchar](50) NOT NULL,

[Age] [int] NOT NULL,

[Gender] [bit] NOT NULL,

CONSTRAINT [PK_Managers] PRIMARY KEY CLUSTERED

(

[id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

SET ANSI_PADDING OFF

GO

SET IDENTITY_INSERT [dbo].[Managers] ON

INSERT [dbo].[Managers] ([id], [Name], [Age], [Gender]) VALUES (1, N'雷军', 30, 1)

INSERT [dbo].[Managers] ([id], [Name], [Age], [Gender]) VALUES (2, N'比尔', 40, 1)

INSERT [dbo].[Managers] ([id], [Name], [Age], [Gender]) VALUES (3, N'杨幂', 30, 0)

INSERT [dbo].[Managers] ([id], [Name], [Age], [Gender]) VALUES (4, N'李彦宏', 30, 1)

SET IDENTITY_INSERT [dbo].[Managers] OFF

/****** Object: Table [dbo].[Companys] Script Date: 06/01/2015 19:00:50 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo].[Companys](

[id] [int] IDENTITY(1,1) NOT NULL,

[Name] [varchar](50) NOT NULL,

[Address] [varchar](50) NOT NULL,

[ManagerId] [int] NOT NULL,

CONSTRAINT [PK_Companys] PRIMARY KEY CLUSTERED

(

[id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

SET ANSI_PADDING OFF

GO

SET IDENTITY_INSERT [dbo].[Companys] ON

INSERT [dbo].[Companys] ([id], [Name], [Address], [ManagerId]) VALUES (1, N'小米', N'北京', 1)

INSERT [dbo].[Companys] ([id], [Name], [Address], [ManagerId]) VALUES (2, N'微软', N'硅谷文', 2)

INSERT [dbo].[Companys] ([id], [Name], [Address], [ManagerId]) VALUES (5, N'京东', N'天津', 3)

INSERT [dbo].[Companys] ([id], [Name], [Address], [ManagerId]) VALUES (9, N'百度', N'河南', 4)

INSERT [dbo].[Companys] ([id], [Name], [Address], [ManagerId]) VALUES (11, N'沙发', N'asf', 1)

INSERT [dbo].[Companys] ([id], [Name], [Address], [ManagerId]) VALUES (12, N'asf', N'阿斯蒂芬', 1)

INSERT [dbo].[Companys] ([id], [Name], [Address], [ManagerId]) VALUES (13, N'阿斯蒂芬', N'爱上', 4)

INSERT [dbo].[Companys] ([id], [Name], [Address], [ManagerId]) VALUES (14, N'阿斯蒂芬', N'asf', 1)

INSERT [dbo].[Companys] ([id], [Name], [Address], [ManagerId]) VALUES (15, N'阿斯蒂芬', N'asf', 3)

INSERT [dbo].[Companys] ([id], [Name], [Address], [ManagerId]) VALUES (16, N'萨芬', N'as ', 3)

INSERT [dbo].[Companys] ([id], [Name], [Address], [ManagerId]) VALUES (17, N'萨芬', N'as ', 3)

INSERT [dbo].[Companys] ([id], [Name], [Address], [ManagerId]) VALUES (18, N'萨芬', N'as ', 3)

INSERT [dbo].[Companys] ([id], [Name], [Address], [ManagerId]) VALUES (19, N'方式', N'萨芬', 1)

INSERT [dbo].[Companys] ([id], [Name], [Address], [ManagerId]) VALUES (20, N'跟得上', N'的是', 1)

INSERT [dbo].[Companys] ([id], [Name], [Address], [ManagerId]) VALUES (21, N'挖法', N'啊大', 3)

SET IDENTITY_INSERT [dbo].[Companys] OFF

/****** Object: ForeignKey [FK_companys] Script Date: 06/01/2015 19:00:50 ******/

ALTER TABLE [dbo].[Companys] WITH CHECK ADD CONSTRAINT [FK_companys] FOREIGN KEY([ManagerId])

REFERENCES [dbo].[Managers] ([id])

ON UPDATE CASCADE

ON DELETE CASCADE

GO

ALTER TABLE [dbo].[Companys] CHECK CONSTRAINT [FK_companys]

GO

附录表2:

USE [Persons]

GO

/****** Object: Table [dbo].[Managers] Script Date: 06/01/2015 18:54:05 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo].[Managers](

[id] [int] IDENTITY(1,1) NOT NULL,

[Name] [varchar](50) NOT NULL,

[Age] [int] NOT NULL,

[Gender] [bit] NOT NULL,

CONSTRAINT [PK_Managers] PRIMARY KEY CLUSTERED

(

[id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

SET ANSI_PADDING OFF

GO

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 附录:1
  • 附录表2:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档