zoukankan      html  css  js  c++  java
  • 为数据访问层编写一个基类(转)

    编写数据访问层代码时,总要一边又一边的重复编写:读数据库连接字符串,建立数据库连接对象,打开连接,创建Command对象,创建数据适配器,创建数据集,填充数据集,关闭连接。这种重复的代码写一两次到还行,写多了就免不了有一些烦了。
      在总结以前的的代码以后,决定重构数据方法层的代码。数据访问层无非进行两种操作:查询返回DataTable,进行插入、更新、删除等无返回值的操作。只要增加一个数据访问层基类包含这些繁琐的代码,其余的数据访问层代码继承数据访问层基类,在调用基类函数时给出存储过程名称和存储过程参数即可。

    数据访问层基类代码:

    using System; 
    using System.Data; 
    using System.Collections;  
    using System.Data.SqlClient; 
     
    namespace DAL 

        /**//// <summary> 
        /// DALBase 的摘要说明。 
        /// 数据层访问基类,定义数据层访问公共的变量,方法 
        /// </summary> 
        public class DALBase 
        { 
            //定义该类共用变量 
            private SqlConnection conn;        // 
            private SqlCommand mycm;        // 
            private DataSet myds;            // 
            private SqlDataAdapter myda;    // 
             
            /**//// <summary> 
            /// 从web.config中读取数据库连接字符串 
            /// </summary> 
            private string CONNSTR = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]; 
     
            public DALBase() 
            { 
                //构造函数,创建对象实例 
                conn = new SqlConnection(CONNSTR); 
                mycm = conn.CreateCommand(); 
                myds = new DataSet(); 
                myda = new SqlDataAdapter(); 
            } 
     
            /**//// <summary> 
            /// 通过存储过程返回查询表的信息 
            /// </summary> 
            /// <param name="sprocName">存储过程名称</param> 
            /// <returns>DataTable</returns> 
            protected DataTable GetTable(string sprocName) 
            { 
                conn.Open(); 
                try 
                { 
                    mycm.CommandText = sprocName; 
                    mycm.CommandType = CommandType.StoredProcedure; 
                    myda.SelectCommand = mycm; 
                    myda.Fill(myds); 
                } 
                finally 
                { 
                    //无论语句执行正确与否,都关闭连接释放资源 
                    conn.Close(); 
                } 
                return myds.Tables[0]; 
            } 
     
            /**//// <summary> 
            /// 通过存储过程和参数返回查询表的信息 
            /// </summary> 
            /// <param name="sprocName"></param> 
            /// <param name="parameters"></param> 
            /// <returns></returns> 
            protected DataTable GetTable(string sprocName, SqlParameter[] parameters) 
            { 
                conn.Open(); 
                try 
                { 
                    mycm.CommandText = sprocName; 
                    mycm.CommandType = CommandType.StoredProcedure; 
                    SqlParameterCollection sqlParams = mycm.Parameters; 
                    //先清空原有的参数 
                    mycm.Parameters.Clear(); 
                    //给Command添加参数 
                    foreach ( SqlParameter parameter in parameters ) 
                    { 
                        mycm.Parameters.Add( parameter ); 
                    } 
                    myda.SelectCommand = mycm; 
                    myda.Fill(myds); 
                } 
                finally 
                { 
                    //无论语句执行正确与否,都关闭连接释放资源 
                    conn.Close(); 
                } 
                return myds.Tables[0]; 
            } 
     
     
            /**//// <summary> 
            /// 通过存储过程及存储过程参数执行对数据库无返回值的操作(如:新增,更新,删除等) 
            /// </summary> 
            /// <param name="sprocName">存储过程名称</param> 
            /// <param name="parameters">存储过程参数</param> 
            protected void SaveTale(string sprocName, SqlParameter[] parameters) 
            { 
                mycm.CommandText = sprocName;  
                mycm.CommandType = CommandType.StoredProcedure;  
                SqlParameterCollection sqlParams = mycm.Parameters; 
                //先清空原有的参数 
                mycm.Parameters.Clear(); 
                //给Command添加参数 
                foreach ( SqlParameter parameter in parameters ) 
                { 
                    mycm.Parameters.Add( parameter ); 
                } 
                //打开连接 
                conn.Open(); 
                try 
                { 
                    //执行 
                    mycm.ExecuteNonQuery();  
                } 
                finally 
                { 
                    //关闭连接 
                    conn.Close(); 
                } 
            } 
        } 

     

    数据访问层代码: 
    using System; 
    using System.Data; 
    using System.Collections;  
    using System.Data.SqlClient; 
     
    namespace DAL 

        public class Test : DALBase 
        { 
            public Test() 
            { 
            } 
     
            public DataTable GetTestTable() 
            { 
              return base.GetTable("存储过程名称"); 
            } 
     
            public DataTable GetTestTableByXName(string XName) 
            { 
                SqlParameter[] parameters = { new SqlParameter( "@XName",SqlDbType.NVarChar,10 ) };      
                return base.GetTable("存储过程名称",parameters); 
            } 
     
     
            public void AddTestTable(string XName, string Description) 
            { 
                SqlParameter[] parameters =  
                { 
                    new SqlParameter( "@XName",SqlDbType.NVarChar,10 ), 
                    new SqlParameter( "@Description",SqlDbType.NVarChar,100) 
                }; 
         
                //设置参数值 
                parameters[0].Value = XName; 
                parameters[1].Value = Description; 
                base.SaveTale("存储过程名称",parameters); 
            } 
        } 

  • 相关阅读:
    C语言的指针
    C语言的编译过程和GCC编译参数
    GCC编译器的安装
    全字段多条件搜索(api接口)
    C# Replace字符替换函数
    NetCore MemoryCache使用
    vs2017 C# ActiveX浏览器插件 创建 发布 C# windows窗体控件库(.NET Framework)注意事项
    [Asp.net core 3.1] 通过一个小组件熟悉Blazor服务端组件开发
    [AspNetCore 3.0 ] Blazor 服务端组件 Render, RenderFragment ,RenderTreeBuilder, CascadingValue/CascadingParameter 等等
    [AspNetCore 3.0] 在RazorPages/MVC 中使用 Blazor (Razor组件)
  • 原文地址:https://www.cnblogs.com/pyt5208/p/556996.html
Copyright © 2011-2022 走看看