这个项目我在分析设计的时候采用了3层构架。我的基本思想是只要和数据库交互的字段和控件,我都把它当作参数传给中间层,然后中间层调用数据层的runCommand()方法,从而达到了各层分工明细的目的。在验证表单方面,我使用了JS,在客户端验证,可以减低服务器压力。
下面是一段注册用户的代码:
//register.cs
//通过一个提交事件,将控件值传入业务层
private void Submit_ServerClick(object sender, System.EventArgs e)
{
UserInfo user=new UserInfo();
user.AddUser(this.UserName.Value,this.PasswordR.Value,this.Email.Value,this.Homepage.Value,
this.show_face.Src);
}
//UserInfo.cs
public void AddUser(string username,string passwords,string email,
string homepage,string face)
{
Database data = new Database();
OleDbParameter[] prams={
data.MakeInParam("@username",OleDbType.VarChar,16),
data.MakeInParam("@passwords",OleDbType.VarChar,12),
data.MakeInParam("@email",OleDbType.VarChar,50),
data.MakeInParam("@homepage",OleDbType.VarChar,50),
data.MakeInParam("@face",OleDbType.VarChar,50)
};
//SQL语句
strcmd="insert into Users(username,passwords,email,homepage,face) values (@username, @passwords, @email, @homepage, @face)";
//将传入的参数放进数组里
string[] values={username,passwords, email, homepage, face};
//将数据库相对应每个字段的变量放进数组
string[] datacolumn={"@username","@passwords", "@email", "@homepage", "@face"};
//调用数据层的runCommand()方法
data.runCommand(strcmd,prams,datacolumn,values);
}
//Database.cs
//返回一个OleDbParameter对象
public OleDbParameter MakeInParam(string ParamName, OleDbType DbType,int size)
{
OleDbParameter param;
return param=new OleDbParameter(ParamName,DbType,size);
}
public void runCommand(string strcmd,OleDbParameter[] prams,string[] datacolumn,string[] values)
{
OleDbDataAdapter cmd = new OleDbDataAdapter(strcmd, conn);
this.Open();
if (prams != null)
{
//2个循环主要是为了创建
// cmd.SelectCommand.Parameters.Add(new OleDbParameter ("@username",OleDbType.VarChar,16));
//赋值
// cmd.SelectCommand.Parameters[@username].Value=username;
//我这样设计主要是为了考虑如果以后要添加或删除用户信息的话,
//我只要修改业务层
foreach (OleDbParameter parameter in prams)
{
cmd.SelectCommand.Parameters.Add(parameter);
}
for(int i=0;i<values.Length;i++)
{
cmd.SelectCommand.Parameters[datacolumn[i]].Value=values[i];
}
}
cmd.SelectCommand.ExecuteNonQuery();
this.Close();
}
完成项目后,我发现了很多问题,试着想去改,怕破坏原来的结构,总的来说还是失败了,我总结了以下经验和问题:
1.在多表操作的时候应该使用存储过程,因为句子一长很容易错,而且调试后才能知道结果,如果是存储过程的话可以在MSSQL中验证语句是否错误。当然存储过程还有其他优点。
2.用JS脚本验证表单。我觉得比.NET提供的验证控件方便多了,而且本地验证减少网络传输中这样那样的问题。
3.我有次在别人机子上调试的出了问题:老是报:“该操作不是一个可更新的操作。”我郁闷了好久,最后在别人帖子了找到了答案,原来是WINDOWS权限问题,那机子用的是WINDOWS2003。
4.我觉得象我这样普通的毕业生,软件工程对我来说太渺茫了,根本就没法达到自己预期的理想,就算是分析时设计到的功能,但在代码实现时被自己设计的框架而卡住。所以我就有个疑问:是拿别人的设计书写好,还是自己设计自己写好?虽然我时常偷窥某人设计书,但是终不得精髓。(就像有了内功新法确缺少套路一样)
5.戒骄戒躁。我觉得骄傲烦躁这是编程大忌。林锐博士一本书写到他同学编程的时候,说他编程的时候简直不是人,就是个指针。可能这就是高手和普通人的区别把