数据访问函数库的使用方法(一)——添加修改数据

由于这个类库是需要实例化的,如果每一次都要实例化,然后用完了在销毁,无形中就多了不少的代码,而且很容易忘记销毁实例。

同时在用户的一次访问的过程中不断地实例化、销毁,也是比较浪费资源的。

所以我建立了一个基类,在基类里面同意获得实例、统一销毁实例,这样在编码的时候就不用考虑有没有实例化,也不用担心是否销毁实例了,

另外用起来(使用方式)也和静态类的使用方式很像了。

基类里的代码:

(ps:我习惯在.aspx.cs里面直接调用 数据访问函数库,所以这个基类是继承System.Web.UI.Page 的,注意并不是说只能在.aspx.cs里面调用数据访问函数库)

namespace jyk.Common

{

    /// <summary>

    /// 页面的基类。

    /// </summary>

    public class BasePageLogon :System.Web.UI.Page

    {

        public DataAccessLayer dal = new DataAccessLayer();    //定义数据访问层的实例

    

        

        #region 初始化 在Page_Load之间执行

        protected override void OnInit(EventArgs e)

        {

            base.OnInit (e);

                    

            //清除缓存

            Response.Cache.SetNoStore();

        }

        #endregion



        #region 销毁数据访问层的实例  OnUnload

        override protected  void OnUnload(EventArgs e)

        {

            if (dal != null)

                dal.Dispose();



            base.OnUnload (e);

        }

        #endregion



    }

}

在新的页面里只要继承了这个基类,就可以直接使用实例了。

1、使用SQL语句添加数据的方法

private void Btn_Save_Click(object sender, System.EventArgs e)

        {

            //添加数据的演示代码



            //定义字段名称

            string[] str1 = new string[];

            str1[] = "Title";

            str1[] = "Content";



            //获取用户输入的数据

            string[] str = new string[];

            str[] = this.Txt_Title.Text.Trim().Replace("'","");

            str[] = this.Txt_Content.Text.Trim().Replace("'","");



            #region 进行各种验证

            if (str[].Length == )

            {

                Functions.PageRegisterAlert(Page,"请填写新闻标题");

                return;

            }

            if (dal.RunSqlExists("select top 1 1 from Demo_News where Title='" + str[] + "'"))

            {

                Functions.PageRegisterAlert(Page,"已经有这个新闻标题了,不能再次添加!");

                return;

            }

            #endregion



            //通过验证后添加数据,不同自己组合 insert into 语句,会在函数内部自动组合。

            //暂时不支持参数化sql语句

            dal.InsertDataStr("Demo_News",str1,str);

            //string NewDataID = dal.InsertDataStr("Demo_News",str1,str);

            ///InsertDataStr 可以返回新增加的记录的主键ID值。

            ///当然有一个前提条件:主键是int自增的,而且不能是复合主键。



            #region 检查是否出现异常

            string err = dal.ErrorMsg ;

            if (err.Length > )

            {

                Functions.PageRegisterAlert(Page,"添加数据时出现异常,请与管理员联系");

                return;

            }

            #endregion

    

            Functions.PageRegisterAlert(Page,"添加成功!");

            



            ///不足的地方的说明:

            ///1、暴露的字段名和表名。

            /// 您可能会说,万一表名或者字段名改了的话,那还得满世界去找该修改哪些地方,

            /// 万一漏掉了一个,编译的时候也不会被发现,只有在运行且添加了一条数据的时候才会发现,

            /// 这样就会很麻烦。

            /// 

            /// 这个确实是一个问题,那么面对这个问题我们是什么态度呢?否定这种方式、进行改进、还是其他?

            /// 可能您会因为这个缺点直接否定这种添加剂的方式,

            /// 而我选择了在此基础上进行改进,于是出现了“表单控件”。 

            /// 



        }

2、使用SQL语句修改数据的方法

private void Btn_Save_Mod_Click(object sender, System.EventArgs e)

        {

            //修改数据的演示代码

            //定义字段名称

            string[] str1 = new string[];

            str1[] = "Title";

            str1[] = "Content";



            //获取用户输入的数据

            string[] str = new string[];

            str[] = this.Txt_Title_Mod.Text.Trim().Replace("'","");

            str[] = this.Txt_Content_Mod.Text.Trim().Replace("'","");



            string NewsID = "";            //根据你的情况来获取主键值

            

            #region 进行各种验证

            if (str[].Length == )

            {

                Functions.PageRegisterAlert(Page,"请填写新闻标题");

                return;

            }

            if (dal.RunSqlExists("select top 1 1 from Demo_News where Title='" + str[] + "' and NewsID <>" + NewsID))

            {

                Functions.PageRegisterAlert(Page,"已经有这个新闻标题了,不能再次添加!");

                return;

            }

            #endregion



            //通过验证后修改数据

            

            //最后一个参数是条件,就是要修改哪条数据,这个参数会加在 where 的后面。

            //所以也可以写成 kind = 1 ,这样的话,所有  kind = 1 的记录就都被修改了

            dal.UpdateData("Demo_News",str1,str," NewsID=" + NewsID);    

            

            

            #region 检查是否出现异常

            string err = dal.ErrorMsg ;

            if (err.Length > )

            {

                Functions.PageRegisterAlert(Page,"修改数据时出现异常,请与管理员联系");

                return;

            }

            #endregion

    

            Functions.PageRegisterAlert(Page,"修改成功!");

            



            /// 其实修改的代码和添加的代码基本相同,所以可以合在一起写。

            /// 我在写的时候也都是放在一起的。

            ///

            

        }

3、使用SQL语句添加和修改数据放在一起的方法

private void Btn_Save_Mod2_Click(object sender, System.EventArgs e)

        {

            //添加和修改数据放在一起的演示代码

            //定义字段名称

            string[] str1 = new string[];

            str1[] = "Title";

            str1[] = "Content";



            //获取用户输入的数据

            string[] str = new string[];

            str[] = this.Txt_Title.Text.Trim().Replace("'","");

            str[] = this.Txt_Content.Text.Trim().Replace("'","");



            #region 进行各种验证

            if (str[].Length == )

            {

                Functions.PageRegisterAlert(Page,"请填写新闻标题");

                return;

            }

            #endregion



            if ("添加数据" == "添加数据")        //根据你的情况来判断是否是添加数据

            {

                dal.InsertDataStr("Demo_News",str1,str);

            }

            else

            {

                //通过验证后修改数据

                string NewsID = "";            //根据你的情况来获取主键值

                dal.UpdateData("Demo_News",str1,str," NewsID=" + NewsID);    

            }

            

            #region 检查是否出现异常

            string err = dal.ErrorMsg ;

            if (err.Length > )

            {

                Functions.PageRegisterAlert(Page,"保存数据时出现异常,请与管理员联系");

                return;

            }

            #endregion

    

            Functions.PageRegisterAlert(Page,"保存成功!");

                    

            

        }

4、使用存储过程实现添加和修改数据数据的方法

private void Btn_Save_Mod3_Click(object sender, System.EventArgs e)

        {

            //使用存储过程实现添加和修改数据



            //清除存储过程的参数,以便重新添加参数

            dal.ClearParameter();



            //获取用户输入的数据

            string[] str = new string[];

            str[] = this.Txt_Title.Text.Trim().Replace("'","");

            str[] = this.Txt_Content.Text.Trim().Replace("'","");



            //定义存储过程的参数,同时赋值

            dal.addNewParameter("@Title",str[],);        //nvarchar的需要设置大小

            dal.addNewParameter("@Content",str[]);            //ntext 的不用设置大小

            

            dal.addNewParameter("@test_double",double.Parse("2.2"));    //double类型的参数

            dal.addNewParameter("@test_bit",true);                        //bit类型的参数

            dal.addNewParameter("@test_decimal",decimal.Parse("1.1"));    //decimal 类型的参数



            //设置返回型的参数 output 

            dal.addNewParameter("@re_Msg",HBS.ParameterKind.NVarChar );    //

            dal.addNewParameter("@re_NewDataID",HBS.ParameterKind.Int  );        //可以用来返回新记录的ID



            

            #region 进行各种验证

            if (str[].Length == )

            {

                Functions.PageRegisterAlert(Page,"请填写新闻标题");

                return;

            }

            #endregion



            if ("添加数据" == "添加数据")        //根据你的情况来判断是否是添加数据

            {

            }

            else

            {

                //通过验证后修改数据

                //修改数据的时候需要设置主键ID

                int NewsID = "";            //根据你的情况来获取主键值

                dal.addNewParameter("Content",NewsID);            //int 的参数

            }

            

            dal.RunStore("Proc_Demo_News_Mod");        //传入存储过程的名称

            

            #region 检查是否出现异常

            string err = dal.ErrorMsg ;

            if (err.Length > )

            {

                Functions.PageRegisterAlert(Page,"保存数据时出现异常,请与管理员联系");

                return;

            }

            #endregion

    

            Functions.PageRegisterAlert(Page,"保存成功!");

                    

            

        }

还有其他的用法,今天先写这些

源代码下载和事例代码下载

http://www.cnblogs.com/jyk/archive/2008/04/25/1170979.html

直接查看源码

http://www.cnblogs.com/jyk/archive/2006/08/16/478021.html

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大内老A

WCF版的PetShop之三:实现分布式的Membership和上下文传递

通过上一篇了解了模块内基本的层次划分之后,接下来我们来聊聊PetShop中一些基本基础功能的实现,以及一些设计、架构上的应用如何同WCF进行集成。本篇讨论两个问...

2605
来自专栏JackeyGao的博客

Golang bongo 简单示例

1512
来自专栏跟着阿笨一起玩NET

C#后台调用前台javascript的五种方法

831
来自专栏cnblogs

Reactor模式的.net版本简单实现--DEMO

     近期在学习DotNetty,遇到不少的问题。由于dotnetty是次netty的.net版本的实现。导致在网上叙述dotnetty的原理,以及实现技巧...

4066
来自专栏令仔很忙

EasyUI----动态拼接EasyUI控件

最近在做的项目中,根据查询到的数据,然后动态的拼接easyUI的控件显示到界面上。在数据库中,有一个命令的表,还有一个参数的表,先到命令的表中去查询这一个设备有...

1963
来自专栏GuZhenYin

使用localResizeIMG3+WebAPI实现手机端图片上传

前言 惯例~惯例~昨天发表的使用OWIN作为WebAPI的宿主..嗯..有很多人问..是不是缺少了什么 - - 好吧,如果你要把OWIN寄宿在其他的地方...代...

2238
来自专栏大内老A

在ASP.NET MVC中通过URL路由实现对多语言的支持

对于一个需要支持多语言的Web应用,一个很常见的使用方式就是通过请求地址来控制界面呈现所基于的语言文化,比如我们在表示请求地址的URL中将上语言文化代码(比如e...

2276
来自专栏c#开发者

不需要Orchestration,通过Pipeline设定动态发送端口属性

不需要Orchestration,通过Pipeline设定动态发送端口属性 通常情况下使用动态发送端口,需要Orchestration中使用表达式(Expres...

2797
来自专栏哲学驱动设计

精通 WPF UI Virtualization

    本篇博客主要说明如何使用 UI Virtualization(以下简称为 UIV) 来提升 OEA 框架中 TreeGrid 控件的性能,同时,给出了一...

2499
来自专栏dotnet & java

Bootstrap-3-Typeahead

是Bootstrap-3-Typeahead,不是Twitter open source的typeahead,两者用法有差异。外加如果配合原生的Bootstra...

1816

扫码关注云+社区

领取腾讯云代金券