今天看到圆子里的文章有一些想法.
先说以下我的WEB项目是怎么做的:以以前做的航空定票项目举例.
首先有一个数据库类:这个类里定义了日志的位置和连接字符串.
namespace PlanOrder
{
public class DBBase_seatOffice
{
protected static string ErrFile=@"D:\DBPlanOrder\DBPlanOrder.log";
protected static readonly string strConn=System.Configuration.ConfigurationSettings.AppSettings["strConnection"];
public DBBase_seatOffice()
{
}
}
}
然后是表类:定义了旅客表的数据库接口
[System.Serializable]
public class DBPlanOrderCustomer
{
public int ID;
public Int64 OrdID;
public string CustomerName;
public string Nationality;
public System.Byte sex;
public int TypeOfID;
public string IDNO;
public DBPlanOrderCustomer()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public DBPlanOrderCustomer(Int64 pOrdID,string pCustomerName,
string pNationality,System.Byte psex,int pTypeOfID,string pIDNO)
{
OrdID=pOrdID;
CustomerName=pCustomerName;
Nationality=pNationality;
sex=psex;
TypeOfID=pTypeOfID;
IDNO=pIDNO;
}
}
然后是表的操作类:
这个类里几乎全部是静态函数,算是应用层
public class DBPlanOrderCustomer_Manage:DBBase_seatOffice
{
/*
* 得到数据集
*/
public static System.Data.DataSet GetCustomerDs2(int ID)
{
try
{
string strSQL="Select * from PlanOrderCustomer where ID="+ID.ToString();
return SqlHelper.ExecuteDataset(strConn,CommandType.Text,strSQL);
}
catch(System.Exception e)
{
string Err="DBPlanOrderCustomer.GetCustomerDs2:"+e.Message;
Error.SaveErr(ErrFile,Err);
return null;
}
}
/*
* 删除定单用户
*/
public static string PlanOrderCustomer_Del(int ID,int InvokeUser)
{
try
{
SqlParameter prmID=new SqlParameter("@ID",SqlDbType.Int);
prmID.Value=ID;
SqlParameter prmInvokeUser=new SqlParameter("@InVokeUser",SqlDbType.Int);
prmInvokeUser.Value=InvokeUser;
SqlParameter prmerr_string=new SqlParameter("@err_string",SqlDbType.NVarChar,500);
prmerr_string.Direction=System.Data.ParameterDirection.Output;
SqlHelper.ExecuteNonQuery(strConn,CommandType.StoredProcedure,"sp_PlanOrderCustomer_Edit",
prmID,prmInvokeUser,prmerr_string);
return Convert.ToString(prmerr_string.Value);
}
catch(System.Exception e)
{
string Err="DBPlanOrderCustomer.PlanOrderCustomer_Del:"+e.Message;
Error.SaveErr(ErrFile,Err);
return "删除定单用户失败!";
}
}
//其他函数
......
.......
}
这样定义数据库层与应用层的好处是:表示层可以很容易的在WEB,WINFORM,WEBSERVICE...之间切换.
缺点:没有考虑数据库的切换,大量采用存储过程,如果数据库换成ORACLE就没有办法了.
但是:一个好的设计真的会在初次编码时使用MSSQL,下次升级的时候变为ORACLE吗??也许真的如JGTM'2004 [MVP] 说的那样:,在这种小程序中你感觉不到太多不妥罢了.
觉得需要继续的发掘自己的想法,写一系列东西出来.下次才真正发表圆子里的文章的看法.
先说以下我的WEB项目是怎么做的:以以前做的航空定票项目举例.
首先有一个数据库类:这个类里定义了日志的位置和连接字符串.
namespace PlanOrder
{
public class DBBase_seatOffice
{
protected static string ErrFile=@"D:\DBPlanOrder\DBPlanOrder.log";
protected static readonly string strConn=System.Configuration.ConfigurationSettings.AppSettings["strConnection"];
public DBBase_seatOffice()
{
}
}
}
然后是表类:定义了旅客表的数据库接口
[System.Serializable]
public class DBPlanOrderCustomer
{
public int ID;
public Int64 OrdID;
public string CustomerName;
public string Nationality;
public System.Byte sex;
public int TypeOfID;
public string IDNO;
public DBPlanOrderCustomer()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public DBPlanOrderCustomer(Int64 pOrdID,string pCustomerName,
string pNationality,System.Byte psex,int pTypeOfID,string pIDNO)
{
OrdID=pOrdID;
CustomerName=pCustomerName;
Nationality=pNationality;
sex=psex;
TypeOfID=pTypeOfID;
IDNO=pIDNO;
}
}
然后是表的操作类:
这个类里几乎全部是静态函数,算是应用层
public class DBPlanOrderCustomer_Manage:DBBase_seatOffice
{
/*
* 得到数据集
*/
public static System.Data.DataSet GetCustomerDs2(int ID)
{
try
{
string strSQL="Select * from PlanOrderCustomer where ID="+ID.ToString();
return SqlHelper.ExecuteDataset(strConn,CommandType.Text,strSQL);
}
catch(System.Exception e)
{
string Err="DBPlanOrderCustomer.GetCustomerDs2:"+e.Message;
Error.SaveErr(ErrFile,Err);
return null;
}
}
/*
* 删除定单用户
*/
public static string PlanOrderCustomer_Del(int ID,int InvokeUser)
{
try
{
SqlParameter prmID=new SqlParameter("@ID",SqlDbType.Int);
prmID.Value=ID;
SqlParameter prmInvokeUser=new SqlParameter("@InVokeUser",SqlDbType.Int);
prmInvokeUser.Value=InvokeUser;
SqlParameter prmerr_string=new SqlParameter("@err_string",SqlDbType.NVarChar,500);
prmerr_string.Direction=System.Data.ParameterDirection.Output;
SqlHelper.ExecuteNonQuery(strConn,CommandType.StoredProcedure,"sp_PlanOrderCustomer_Edit",
prmID,prmInvokeUser,prmerr_string);
return Convert.ToString(prmerr_string.Value);
}
catch(System.Exception e)
{
string Err="DBPlanOrderCustomer.PlanOrderCustomer_Del:"+e.Message;
Error.SaveErr(ErrFile,Err);
return "删除定单用户失败!";
}
}
//其他函数
......
.......
}
这样定义数据库层与应用层的好处是:表示层可以很容易的在WEB,WINFORM,WEBSERVICE...之间切换.
缺点:没有考虑数据库的切换,大量采用存储过程,如果数据库换成ORACLE就没有办法了.
但是:一个好的设计真的会在初次编码时使用MSSQL,下次升级的时候变为ORACLE吗??也许真的如JGTM'2004 [MVP] 说的那样:,在这种小程序中你感觉不到太多不妥罢了.
觉得需要继续的发掘自己的想法,写一系列东西出来.下次才真正发表圆子里的文章的看法.