silver

前途迷茫。。。

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::
 

SUFC_WebSite 广东工业大学计算机学院学生会网站,从接手到现在快一个多月了,实际动手也不过半个月,DAL已经完成了百分之七八十吧,剩下百分之二十是在测试阶段完成,我想测试阶段的改动也会挺大吧。

DAL类:

DAL说白了就是一个类库,供前台调用,对数据库执行增删改查。DAL 为每个实体提供一组方法,每个方法会调用一或多个存储过程。

通过抽取方法,把执行存储过程的方法分离开来,把底层对数据库的操作都封装在一类里面,减少了代码冗余,代码最大程度的得到了复用,几乎全部DAL方法都要调用。

一共有3个方法,一个构建Command 对象,两个执行存储过程。传入参数对象数组,设置Command 对象,也是一个减少代码冗余的好方法。

        /// <summary>
        
/// 执行存储过程,返回DataSet对象
        
/// </summary>
        
/// <param name="storedProcName">存储过程名字</param>
        
/// <param name="parameters">参数</param>
        
/// <param name="tableName">表名</param>
        
/// <returns></returns>
        public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName)
        {
            
using (SqlConnection connection = new SqlConnection(connectionString))
            {
                DataSet dataSet 
= new DataSet();
                connection.Open();
                SqlDataAdapter sqlDateAdpter 
= new SqlDataAdapter();
                sqlDateAdpter.SelectCommand 
=DBHelpSQL.BuildQueryCommand(connection, storedProcName, parameters);
                sqlDateAdpter.Fill(dataSet, tableName);
                
return dataSet;

            }
        }

        
/// <summary>
        
/// 执行存储过程,返回指示值
        
/// </summary>
        
/// <param name="storedProcName">存储过程名字</param>
        
/// <param name="parameters">参数</param>
        
/// <returns>指示值</returns>
        public static void RunProcedure(string storedProcName, IDataParameter[] parameters)
        {
            
using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlCommand command 
= BuildQueryCommand(connection, storedProcName, parameters);
                connection.Open();

                command.ExecuteNonQuery();
            }
        }

        
/// <summary>
        
/// 构建 Command 对象,内部方法
        
/// </summary>
        
/// <param name="connection"></param>
        
/// <param name="storedProcName"></param>
        
/// <param name="parameters"></param>
        
/// <returns></returns>
        private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
        {
            SqlCommand command 
= new SqlCommand(storedProcName, connection);
            command.CommandType 
= CommandType.StoredProcedure;
            
foreach (SqlParameter parameter in parameters)
            {
                
if (parameter != null)
                {
                    
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
                        (parameter.Value 
== null))
                    {
                        parameter.Value 
= DBNull.Value;
                    }
                    command.Parameters.Add(parameter);
                }
            }
            
return command;
        }

 

实体类的命名:

一个实体对象就是一组属性,BLL 通过调用实体类和IDAL ,实现对具体数据的操作。

写实体类并不是很难,但是后来我发现我错了,错就错在属性的变量名的命名上,准确的命名规则如下:先加“_”下划线,再变量名。

                private int _userno;

        
/// <summary>
        
/// 用户名
        
/// </summary>
        public int UserNO
        {
            
set{ _userno=value;}
            
get{return _userno;}
        }


 

SqlParameter类:

SUFC_WebSite_DAL中,实际用的是SqlParameter数组,这样就不用因为参数的个数而受限制了,只要把SqlParameter[] 直接传个BuildQueryCommand()方法(详细看前面代码)

SqlParameterDirection属性:

获取或设置一个值,该值指示参数是只可输入、只可输出、双向还是存储过程返回值参数。

这个属性需要ParameterDirection 枚举来设置的:

Input             参数是输入参数。

Output           参数是输出参数。

InputOutput   参数既能输入,也能输出。

ReturnValue    参数表示诸如存储过程、内置函数或用户定义函数之类的操作的返回值。

需要注意一点的是,如果执行存储过程,返回两个值(不是返回一个结果集和一个值),这时需要在存储过程里把其中一个设置冲OUTPUT,这样DAL才能得到两值。

 

web.config文件:

SUFC_WebSite 的连接字符串是直接明文写在web.config文件里面的,这是十分不安全的,在后续的工作中会努力完善的。

实际项目中,通过web.config文件来设置获取类是很常见的。比如通过事先存放在web.config文件的命名空间和类名,直接指向具体的数据库操作类,配置好具体的Factory对象的完整的类名,实现“工厂模式”。这各也是我没有在SUFC_WebSite项目实现。上述两个缺点,我会尽力弥补上去。

 



posted on 2009-08-09 01:08  silverVan  阅读(233)  评论(0)    收藏  举报