Step By Step 一步一步写网站[1] —— 填加数据

填加数据是一个项目必不可少的部分,也是一个基础操作,使用也是最频繁的。 那么您是怎么实现添加数据的呢? 添加数据可以分为几种情况。 1、单表添加,不需要事务。最简单最常见 2、多表(主从表)添加,不需要事务。 3、多表(主从表)添加,需要事务。 4、其他。 今天先来说一下简单的,单表添加的情况。为了更形象一点,我们先来假设一个环境。 要求:信息发布系统,添加一条信息。 表名:T_News 字段:NewsID,标题,作者,内容,发布时间等。 先来说一下我常用的方法,然后在猜想一下OOD的方法,最后猜想一下三层的方法。 接下来是当需求发生变化如何应对、添加功能了怎么办、更换数据库又怎么处理。

在这些情况下三种方式的对程序的修改成都的对比。 最后最后是 抽象。毕竟一个系统不是只有一个填加数据的地方,假设有一百的,那么怎么处理更好呢?

>>想好了的,思维却乱了,当初好好学习就好了。

>>好了,继续。

(假设数据库已经设计好了,文档、设计都做好了。)

 第一步:写.aspx页面。在页面上绘制文本框、下拉列表框、复选框等控件,用来接收用户输入的信息。

在写点js脚本的验证了这类的代码。

代码略

分析:这一步基本没有什么异议。aspx的变动对下面的影响基本不大。

第二步:写.aspx.cs文件。

1、定义一个数组(string[] str1),目的是存放字段名称,要添加哪些字段就定义多少数组元数(下标)。

2、把字段放在数组里面。

3、在定义一个数组(string[] str),目的是存放字段对应的数据。要和上面的数组内容一一对应

4、赋值,从控件里面取值放在str 里面。

5、必要的验证。比如标题不能为空,标题不能重复等。

6、调用“我的数据访问层”里的一个方法添加数据。

7、根据返回信息判断是否发生异常,并作相应的处理。

8、结束。

说明:可以使用组合SQL语句(就是insert into )的方法,也可以使用存储过程的方法。两个方法区别不大。

代码:SQL

public void add()
        {
            //添加数据
            string[] str1 = new string[];
            //NewsID(自增1),标题,作者,内容,发布时间(字段的默认值(GetDate()))
        
            #region 定义字段
            str1[] = "Title";
            str1[] = "Editor";
            str1[] = "Content";
            
            #endregion

            string[] str = new string[];
    
            #region 获取数据
            str[] = this.Txt_Title.TextTrimNone;    //标题;
            str[] = this.Txt_Editor.TextTrimNone;    //作者;
            str[] = this.Txt_Content.TextTrimNone;    //内容;
            
            #endregion

            #region 验证数据
            if (str[].Length == )
            {
                Page.RegisterStartupScript("err",JYK.Functions.myAlert("请填写主题名称!"));
                return;
            }
            if (str[].Length == )
            {
                Page.RegisterStartupScript("err",JYK.Functions.myAlert("请填写内容!"));
                return;
            }
            #endregion
            
            //实例化
            JYK.DataAccessLayer dal = new JYK.DataAccessLayer();
            //添加数据,获取新添加的数据的NewsID字段的值
            string NewID = dal.InsertDataStr("T_News",str1,str);
            

            #region 检查是否出现异常
            if (dal.ErrorMsg.Length > )
            {
                Page.RegisterStartupScript("err",JYK.Functions.myAlert("保存信息的时候出现意外情况,请与我们联系!"));
                return;
            }
            #endregion

            dal.Dispose();
        }

 代码:存储过程

public void add()
        {
            //添加数据
            //NewsID(自增1),标题,作者,内容,发布时间(字段的默认值(GetDate()))
            
            string[] str = new string[];
            #region 获取数据
            str[] = this.Txt_Title.TextTrimNone;    //标题;
            str[] = this.Txt_Editor.TextTrimNone;    //作者;
            str[] = this.Txt_Content.TextTrimNone;    //内容;
            
            #endregion


            #region 验证数据
            if (str[].Length == )
            {
                Page.RegisterStartupScript("err",JYK.Functions.myAlert("请填写主题名称!"));
                return;
            }
            if (str[].Length == )
            {
                Page.RegisterStartupScript("err",JYK.Functions.myAlert("请填写内容!"));
                return;
            }
            #endregion
            
            JYK.DataAccessLayer dal = new JYK.DataAccessLayer();
    
            #region 添加存储过程的参数
            dal.addNewParameter("@Title",str[],);    //nvarchar(100) 类型 
            dal.addNewParameter("@Editor",str[],);    //nvarchar(20) 类型 
            dal.addNewParameter("@Content",str[]);        //ntext 类型 
            //dal.addNewParameter("@Hits",Int32.Parse(""));    //假设要添加一个int类型的数据,这里只是演示
            #endregion

            //执行存储过程
            dal.RunStore("Proc_News_AddData");    
        
            #region 检查是否出现异常
            if (dal.ErrorMsg.Length > )
            {
                Page.RegisterStartupScript("err",JYK.Functions.myAlert("保存信息的时候出现意外情况,请与我们联系!"));
                return;
            }
            #endregion
            
            dal.Dispose();
        }

两段代码基本相同,只是个别的地方有一点不同。

第三步:数据访问层

应该写点代码吧,但是这里我直接使用SQLHelp这类的Help工具直接代替数据访问层。所以呢这里就不需要在写代码了。

这里使用的是我自己写的Help,我把他叫做“我的数据访问层”。

小结:

 优点:

1、只涉及.aspx和.aspx.cs两个文件。.aspx.cs里面没有需要重用的代码,所以没有提出来放在.cs文件。这样也就不需要数据传递了,省了一个实体类。

2、数据访问层使用通用的方式,无需再编写代码。

3、所需要的代码少。我觉得代码少是便于维护的一个基础。

4、没有出现SQL语句,也没有出现 SqlClient 里面的对象,也就是说更换数据库的话,不需要修改这些代码。

缺点:

看起来不符合“标准”,一开始会用着不习惯。没有采用强类型,好像也不是弱类型。没有OO的感觉,有点乱。

 我的数据访问层的源码

先写到这里,下一篇写猜想的OOD的方法。因为我还不会OO所以只好猜想了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python小屋

BeautifulSoup解析库select方法实例——获取企业信息

本文内容由浙江浦江中学方春林老师提供。 Requests 是用Python语言编写,基于urllib,采用Apache2 Licensed 开源协议的 HTTP...

3345
来自专栏从零开始学自动化测试

Selenium2+python自动化44-元素定位参数化(find_element)

前言 元素定位常用的有八种方法,这个能看到这一篇的小伙伴都知道了,那么有没有一种方法,可以把常用的八种定位合为一种呢?也就是把定位的方式参数化,如id,name...

3465
来自专栏java达人

说说JSON和JSONP( 含jquery例子)

说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义...

2945
来自专栏程序你好

C# API中的模型和它们的接口设计

962
来自专栏向治洪

Google V8 引擎

V8的前世今生 V8是JavaScript渲染引擎,第一个版本随着Chrome的发布而发布(具体时间为2008年9月2日)。在运行JavaScript之前,相比...

6575
来自专栏日常学python

数据抓取实践:对加密参数及压缩混淆 JS 的逆向分析

本文会介绍几种分析技巧,需要一点前端知识(总感觉在前端做防爬没什么意义,因为源码都是公开的)。文末附上爬虫 Demo 验证,虽然对于这个案例来说使用 Selen...

5670
来自专栏Java帮帮-微信公众号-技术文章全总结

JavaWeb08-XML,tomcat,HTTP轻松入门

XML&tomcat&HTTP 一.XML基础知识 1. xml介绍 XML 指可扩展标记语言(EXtensible Markup Language),也是一种...

4079
来自专栏守候书阁

重构 - 设计API的扩展机制

上篇文章,主要介绍了重构的一些概念和一些简单的实例。这一次,详细的说下项目中的一个重构场景--给API设计扩展机制。目的就是为了方便以后能灵活应对需求的改变。当...

49017
来自专栏向治洪

Google V8引擎

V8的前世今生 V8是JavaScript渲染引擎,第一个版本随着Chrome的发布而发布(具体时间为2008年9月2日)。在运行JavaScript之前,相比...

4465
来自专栏腾讯Bugly的专栏

那些年,我们一起写过的“单例模式”

本文来自:“天天P图攻城狮”公众号(ttpic_dev) 题记 度娘上对设计模式(Design pattern)的定义是:“一套被反复使用、多数人知晓的、经过分...

4764

扫码关注云+社区

领取腾讯云代金券