三层架构之数据层DAL(Data Access Layer)[数据分离]、网站结构、表现和行为的三者分离[W3C倡导]
三层架构之数据层DAL(Data Access Layer)[数据分离]
三层架构之
数据层DAL(Data Access Layer)[数据分离]
using System.Data;
using System.Data.SqlClient;
namespace Dal
{
///<summary>
///数据处理类。
///</summary>
public class DataClass
{
public static SqlConnection con = new SqlConnection();
private static SqlCommand cmd = new SqlCommand();
public DataClass(string conStr)
{
con.ConnectionString = conStr;
}
///<summary>
///打开数据库连接。
///</summary>
public void OpenConnection()
{
if(con.State!=ConnectionState.Open)
{
con.Open();
}
}
///<summary>
///关闭与数据库的连接。
///</summary>
public void CloseConnection()
{
con.Close();
}
private static void PrepareCommand(string procName,SqlTransaction trans,SqlParameter[] parms)
{
cmd.Connection = con;
cmd.CommandText = procName;
if(trans != null)
cmd.Transaction = trans;
cmd.CommandType = CommandType.StoredProcedure;
if(parms!=null)
{
foreach (SqlParameter parm in parms)
cmd.Parameters.Add(parm);
}
}
#region 执行查询,并返回查询所返回的结果集中第一行的第一列,忽略额外的列或行,ExecuteScalar。
///<summary>
///执行查询,并返回查询所返回的结果集中第一行的第一列,忽略额外的列或行。
///</summary>
///<param name="procName">
存储过程</param>
///<param name="parms">SqlParameter数组</param>
///<returns>ExecuteScalar</returns>
public object cmdExecScalarProc(string procName,SqlParameter[] parms)
{
object obj = new object();
PrepareCommand(procName,null,parms);
OpenConnection();
obj = cmd.ExecuteScalar();
CloseConnection();
cmd.Parameters.Clear();
return obj;
}
///<summary>
///执行查询,并返回查询所返回的结果集中第一行的第一列,忽略额外的列或行。
///</summary>
///<param name="procName">存储过程</param>
///<param name="parms">SqlParameter数组</param>
///<param name="trans">SQL Server 数据库中处理的 Transact-SQL 事务</param>
///<returns>ExecuteScalar</returns>
public object cmdExecScalarProc(string procName,SqlParameter[] parms,SqlTransaction trans)
{
object obj = new object();
PrepareCommand(procName,trans,parms);
OpenConnection();
obj = cmd.ExecuteScalar();
CloseConnection();
cmd.Parameters.Clear();
return obj;
}
#endregion
#region 对连接执行 Transact-SQL 语句,ExecuteNonQuery。
///<summary>
///对连接执行 Transact-SQL 语句。
///</summary>
///<param name="procName">存储过程</param>
///<param name="parms">SqlParameter数组</param>
public void cmdExecNonQueryProc(string procName,SqlParameter[] parms)
{
PrepareCommand(procName,null,parms);
OpenConnection();
cmd.ExecuteNonQuery();
CloseConnection();
cmd.Parameters.Clear();
}
///<summary>
///对连接执行 Transact-SQL 语句。
///</summary>
///<param name="procName">存储过程</param>
///<param name="parms">SqlParameter数组</param>
///<param name="trans">SQL Server 数据库中处理的 Transact-SQL 事务</param>
public void cmdExecNonQueryProc(string procName,SqlParameter[] parms,SqlTransaction trans)
{
PrepareCommand(procName,trans,parms);
OpenConnection();
cmd.ExecuteNonQuery();
CloseConnection();
cmd.Parameters.Clear();
}
#endregion
#region 返回SqlDataReader。
///<summary>
///返回SqlDataReader,在使用后请关闭本对象,同时将自动调用CloseConnection()来关闭数据库连接。
///</summary>
///<param name="procName">存储过程</param>
///<param name="parms">SqlParameter数组</param>
///<returns>SqlDataReader对象</returns>
public SqlDataReader DataReader(string procName)
{
SqlDataReader dr = null;
PrepareCommand(procName,null,null);
OpenConnection();
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return dr ;
}
///<summary>
///返回SqlDataReader,在使用后请关闭本对象,同时将自动调用CloseConnection()来关闭数据库连接。
///</summary>
///<param name="procName">存储过程</param>
///<param name="parms">SqlParameter数组</param>
///<returns>SqlDataReader对象</returns>
public SqlDataReader DataReader(string procName,SqlParameter[] parms)
{
SqlDataReader dr = null;
PrepareCommand(procName,null,parms);
OpenConnection();
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return dr ;
}
///<summary>
///返回SqlDataReader,在使用后请关闭本对象,同时将自动调用CloseConnection()来关闭数据库连接。
///</summary>
///<param name="procName">存储过程</param>
///<param name="trans">SQL Server 数据库中处理的 Transact-SQL 事务</param>
///<returns>SqlDataReader对象</returns>
public SqlDataReader DataReader(string procName,SqlTransaction trans)
{
SqlDataReader dr = null;
PrepareCommand(procName,trans,null);
OpenConnection();
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return dr ;
}
///<summary>
///返回SqlDataReader,在使用后请关闭本对象,同时将自动调用CloseConnection()来关闭数据库连接。
///</summary>
///<param name="procName">存储过程</param>
///<param name="parms">SqlParameter数组</param>
///<param name="trans">SQL Server 数据库中处理的 Transact-SQL 事务</param>
///<returns>SqlDataReader对象</returns>
public SqlDataReader DataReader(string procName,SqlParameter[] parms,SqlTransaction trans)
{
SqlDataReader dr = null;
PrepareCommand(procName,trans,parms);
OpenConnection();
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return dr ;
}
#endregion
#region 返回内存数据中的一个表,DataTable。
///<summary>
///返回内存数据中的一个表。
///</summary>
///<param name="procName">存储过程</param>
///<returns>DataTable</returns>
public DataTable dt(string procName)
{
SqlDataAdapter da = new SqlDataAdapter(procName,con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
///<summary>
///返回内存数据中的一个表。
///</summary>
///<param name="procName">存储过程</param>
///<param name="parms">SqlParameter数组</param>
///<returns>DataTable</returns>
public DataTable dt(string procName,SqlParameter[] parms)
{
SqlDataAdapter da = new SqlDataAdapter(procName,con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
DataTable dt = new DataTable();
for(int i = 0;i < parms.Length;i++)
{
da.SelectCommand.Parameters.Add(parms[i]);
}
da.Fill(dt);
cmd.Parameters.Clear();
return dt;
}
#endregion
}
}
本文不断更新中……
》
网站性能优化
》网站结构、表现和行为
网站结构、表现和行为的三者分离[W3C倡导]
结构、表现和行为的三者分离
web标准的一个重要的思想就是表现和结构分离,以前我一直误解了,以为web标准就是简单的用div替代tabel;不使用描述性的标签混杂在网页结构中,而用CSS样式表来表示,使表现和 结构分离。原来这都是表面的理解,应该说,结构重在语义,要使用结构化语言来梳理网页结构,当然不是简单的整理,而是有实际意义的,定义尽可能”人性化“。每一个“骨架”都要有意义,例如将网页分成若干个区域,网页LOGO、标题、内容、导航菜单、版权说明等等,这些都是必须有意义的,说白了不是用div布局,而是用div结构化。
这使我联想到用在图片img标签中的alt属性,以前我们通常都是忽略的,或者用毫无意义的说明文字代替图片,又或者是一大堆又长又臭的描述文字……如果必要我们应该简练地描述,毫无相关的就用留空它,但不是忽略不写。
网页要表达的内容就是信息,比如你要呈现的文字、图片、多媒体等信息,结构就是这些内容的方式,表现就是CSS,行为就是DOM,JavaScript等。
所以通俗点说,HTML就是结构。
由于HTML的开放性,结构可以有很多种,最终呈现在用户面前同样的内容,其HTML结构却可以多种多样,而好的HTML是“结构化”的,也就是有条理的,基于语义的。比如p 表示一个段落,h3 表示一个三级标题,address 表示一个地址等等。而以前用table布局很大程度上破坏了这种语义的要求,充斥在整篇文档中的table,tr,td标签就不是结构化的,他们的出现是没有意义的,纯粹是为了布局的需要。类似的还有font ,b 标签等,这些都是没有结构意义而纯粹为了样式而存在的标签。
现在提倡的HTML写法是标签要言之有物,不要词不达意,也就是用什么和怎么用的问题。比如b就属于不该用的标签,因为它不表示任何结构,我们不知道它里面是什么东西,只知道它表示“加粗”,但加粗是CSS也就是表现层面的东西,这属于“言之无物”。而如果将一个本是标题的内容用p 括起来也是非结构化的,这属于“词不达意”。
关于div(以及span ),它是一个没有特定意义只有普适意义的标签,表示一个区域。因为HTML中具有特定意义的标签实在是太少了(所以W3C主张从HTML向XML过渡),我们某些情况下只有配合使用div ,span 等标签和id,class等属性来组织一个特定的内容。所以我觉得divspan 都是比较尴尬的标签,只能算是半语义的,只是由于HTML的局限,我们不得不大量的使用他们。
W3C提倡结构、表现、行为三者分离,任何一个层面的改变都不应当依赖其他层面。这是一种很好的思想,不过在目前技术局限的情况下这还是一种理想状态,因为无论是HTML,CSS,DOM等规范还是浏览器的支持等都还不完善,至少是不足以支撑这种思想,我们所能做的只是尽力如此了。
畅想一下未来这种理想的三者分离的状况下做网站,需求通过一系列沟通将转变为一个结构化文档(比如XML),同时到达前台和后台,然后两者一起开发,互不干扰。前台美工负责出设计图并和客户沟通,定稿后然后通过CSS和结构化文档整合,后台程序员则直接按需求做功能模块,最后前台后台无缝整合……