学习cnblogsGuestBook
今天重新看了一遍【cnBlogsGuestBook v1.0】和【cnBlogsGuestBook v2.0】,顺便对两者做一个比较,同时整理一下自己的思路,对asp.net实现留言本功能的演化,有一个大致的认识:.net到底能为我们的应用实现到什么程度?我们到底能用.net做得更好?
<1>cnBlogsGuestBook v1.0
用asp的写法来实现留言本。(可看偶的“菜鸟留言”http://www.cnblogs.com/lovewangshu/archive/2005/03/04/113113.html
菜鸟看点:
1。Response.Write(strResponse)发生在显示html代码之前,也就是说,Page_load()先发生。
2。ADO.net连接数据库的一些基本操作。绑定、显示数据库表的一些方法。
3。Response.Write(strResponse)里strResponse的生成。
4。数据库添加记录的方法:先将表同DataSet绑定,通过向DataSet添加记录,实现表添加记录,当然最后得:myAdapter.Update()一下。
5。" 因为不是Submit按钮,所以不能使页面刷新" 有点不懂。Button按了之后不会引发Page_load()???
这些都应该属于asp.net的一些技巧性的东西。对菜鸟而言,技巧性的东西必须掌握,在能熟练应用的基础上能摸索出内在的规律,理解它的架构,对不明白的地方多查一些资料,多看优秀的源代码,提高自己的水平。
再看一遍V1.0 ,会发现代码中有许多重复的代码,主要是ADO.NET连接数据库方面的,如
private void Page_Load(object sender, System.EventArgs e)
{
//建立数据库路径存储字符串
string dbname;
//SQL语句字符串
string strSQL;
dbname=Server.MapPath(@"data0621/database.mdb");
//建立一个连接数据库用的Connection
OleDbConnection conn=new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source="+dbname);
//打开这个连接
conn.Open();
strSQL="select * from tbl_msg";
DataSet ds=new DataSet();
OleDbDataAdapter myAdapter=new OleDbDataAdapter(strSQL,conn);
//将数据填如DataSet对象中
myAdapter.Fill(ds,"tbl_msg");
....
}
//dt中存ds中表tbl_msg的内容
DataTable dt=ds.Tables["tbl_msg"];
{
//建立数据库路径存储字符串
string dbname;
//SQL语句字符串
string strSQL;
dbname=Server.MapPath(@"data0621/database.mdb");
//建立一个连接数据库用的Connection
OleDbConnection conn=new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source="+dbname);
//打开这个连接
conn.Open();
strSQL="select * from tbl_msg";
DataSet ds=new DataSet();
OleDbDataAdapter myAdapter=new OleDbDataAdapter(strSQL,conn);
//将数据填如DataSet对象中
myAdapter.Fill(ds,"tbl_msg");
....
}
//dt中存ds中表tbl_msg的内容
DataTable dt=ds.Tables["tbl_msg"];
private void btnSubmit_Click(object sender, System.EventArgs e)
{
//提交数据操作
//当然,首先要判断的数据的合法性
if(txtboxTitle.Text==""||txtboxContent.Text=="")
{
Response.Write("<font color='red'>title和content都不能为空</font>");
}
else
{
string dbname;
string strSQL;
dbname=Server.MapPath(@"data0621/database.mdb");
OleDbConnection conn=new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source="+dbname);
conn.Open();
strSQL="select msg_title,msg_content,msg_time from tbl_msg";
OleDbDataAdapter myAdapter=new OleDbDataAdapter(strSQL,conn);
OleDbCommandBuilder cb=new OleDbCommandBuilder(myAdapter);
DataSet dss=new DataSet();
myAdapter.Fill(dss,"tbl_msg");
{
//提交数据操作
//当然,首先要判断的数据的合法性
if(txtboxTitle.Text==""||txtboxContent.Text=="")
{
Response.Write("<font color='red'>title和content都不能为空</font>");
}
else
{
string dbname;
string strSQL;
dbname=Server.MapPath(@"data0621/database.mdb");
OleDbConnection conn=new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source="+dbname);
conn.Open();
strSQL="select msg_title,msg_content,msg_time from tbl_msg";
OleDbDataAdapter myAdapter=new OleDbDataAdapter(strSQL,conn);
OleDbCommandBuilder cb=new OleDbCommandBuilder(myAdapter);
DataSet dss=new DataSet();
myAdapter.Fill(dss,"tbl_msg");
在本例中,asp.net访问数据库通过DataSet数据集来实现。DataSet相当于一个下载到本地的离线数据库,通过DataSet实现select,Update,insert,delete,最后通过适配器(DataAdapter)的Update(DataSet)操作,实现离线数据库和Web端数据库的同步。
V1.0 里,在需要数据库操作的地方都重新定义了一个DataSet的实例,因为是对同一个数据库表单的操作,所以出现大量的重复代码。虽然可以对重复代码定义一个返回DataSet的函数,不过毫无OO思想而言,并不是优秀的代码。