论文导读::为了提高WEB信息系统开发的可复用性,本文设计了可通用的表单处理组件,其忽略掉数据库的不同结构,自动生成表单,并能针对不同的表单实现信息的添加,这样使得信息管理系统的开发及维护变得相对简单,并且这一技术被用到精品课的网站系统建设及课程建设上,结果表明了该方法的有效性。
论文关键词:复用,表单处理,自动生成,通用类,ADO.NET
1、引言
Ihternet的发展使得Web信息系统也获得了很大的发展。当网络技术和分布式计算技术逐渐发展并走向成熟时,Web信息系统的开发也变得非常复杂。由于缺乏统一有效的管理,大多数系统的开发、维护工作还处于混乱状态,且系统开发有很大的随意性,并导致系统难以维护。对特定领域的系统开发来说,如果能复用已有的设计和开发成果通用类,将会在很大程度上提高系统的开发效率,节省大量的人力和物力资源期刊网。本文利用.net技术,采用“搭积木”的方式生产软件,设计并实现了信息管理系统的一个通用的表单处理组件。此组件可以在基于.NET平台的信息管理系统的开发中重复使用,为信息管理系统的快速开发提供了有力的支持。同时,文章对该组件的设计思路及实现过程均进行了比较详细的介绍,为其它类似组件的实现提供了一个参考。
2、主要功能与实现
2.1通用数据库操作类的实现
在ADO.NET中,可以使用不同的对象实现对数据库的操作,为充分实现可复用性,在此设计了一个通用数据库类,以能够保证多种不同对象的操作。
(1)连接字符串connectionString的设置
在ADO.NET中,对数据库进行操作时需要先请求连接,以便进行客户端相关信息的认证,作为通用信息管理通用类,能够实现对不同数据库的检索,因此connectionString属性的设置可以由用户在调用的时候灵活的设置,从而实现数据库的动态连接。以下有两种方法:
private stringconnectionString;
public SqlDb()
{ connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;// 在web.config中配置“conn”的数据库连接字符串
}
public SqlDb(string connectionString)
{
this.connectionString = connectionString;//参数传递赋值
}
(2)定义组件所需的数据库操作方法
在要设计的组件中需用到DataReader和DataAdapter对象,在此定义了两个方法,分别实现了返回对应类型的数据库操作,根据实际组件的不同,此类中的数据操作方法还可以进行扩充。
public SqlDataReaderExecuteReader(string sql)
{
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = newSqlCommand(sql, connection);
connection.Open();
return command.ExecuteReader();
}
public SqlDataAdapterExecuteDataAdapter(string sql)
{
DataTable data = newDataTable();//实例化DataTable,用于装载查询结果集
SqlDataAdapter adapter;
SqlConnection connection = new SqlConnection(connectionString);
using (SqlCommandcommand = new SqlCommand(sql,connection))
{
//通过包含查询SQL的SqlCommand实例来实例化SqlDataAdapter
adapter = new SqlDataAdapter(command);
}
adapter.SelectCommand = new SqlCommand(sql, connection);
return adapter;
}
2.2通用自动表单处理类的实现
设计此类可以实现忽略数据库的表结构,自动生成表单信息,提交信息及显示信息。不再像传统的WEB系统设计局限于不同数据表的内容做重复的设计,大大提高了可复用性期刊网。并且由于采用了分层结构,此类可以针对不同的数据库通用通用类,具有较强的灵活性。
(1)自动生成表单的实现
由于要实现对不同数据库都能生成相应的表单信息,且数据库不同,相应字段名,字段数及类型均有所不同,这要求设计时实现将不同的表字段自动添加至表单,针对不同字段类型生成表单元素,使用中关键用到四类控件:table标签:用于表单的排版;Panel控件:用于动态添加控件,以实现表单的自动生成;Lable控件:用于显示某张表的各个字段名;TextBox控件:用于提供对应的表单元素以收集表单信息。以下是关键代码:
public Panel bind(Panel cpanel, string tablename)
{
Panel mypanel=newPanel();
Label tlabel= newLabel();
tlabel.Text = "<table >";
mypanel.Controls.Add(tlabel);//添加表格标签,以规范排版
stringtvalue;
SqlDb da = new SqlDb();
string sql = "select* from " + tablename;
SqlDataReader dr = da.ExecuteReader(sql);
for (int i = 1; i <=dr.FieldCount-1 ; i++)
{
string ttext = dr.GetName(i); //获取字段名
string text = dr.GetDataTypeName(i);//获取字段类型
switch (text)
{
case "nvarchar":tvalue = "请输入字符"; break;
case "ntext":tvalue = "请输入字符"; break;
case "datetime":tvalue = DateTime.Now.ToString(); break;
//省略部分为针对不同的数据类型个性化的初始值提示
……
}
Label mylabel = newLabel();
mylabel.ID = "MyLabel" + i;
mylabel.Text = "<tr><td>"+ ttext + "</td><td>";
mypanel.Controls.Add(mylabel);//向Panel添加Label控件
TextBox mytext = newTextBox();
mytext.ID = "MyText" + i;
mytext.Text = tvalue;
if (text == "ntext")
{//当字段类型是“ntext”时,表单元素变为多行文本框
mytext.TextMode = TextBoxMode.MultiLine;
mytext.Rows = 5;
}
//省略部分为在生成表单时的某些特殊要求
…….
mytext.Columns = 50;
mypanel.Controls.Add(mytext); //向Panel添加TextBox控件
}
cpanel.Controls.Add(mypanel); //将生成的控件组添加给主页面Panel
return cpanel;
}
(2)通用表单信息提交的实现
由于表单是自动生成的,而不同数据表的生成的表单元素数目不同,所以通过Request.Form方法获取表单元素的值通用类,再采用DataAdapter对象的Update()方法进行新增记录的更新。
public voidinsert(string tablename)
{
SqlDb da = new SqlDb();
string sql = "select* from " + tablename;
SqlDataAdapter objcmd =da.ExecuteDataAdapter(sql);//建立DataAdapter
SqlCommandBuilder objtable = new SqlCommandBuilder(objcmd);
DataSet ds = newDataSet();
objcmd.Fill(ds,tablename);//建立DataSet
DataTable dt = ds.Tables[tablename];
DataRow dtrow = dt.NewRow();//为DataTable添加新行
//为新行的各个字段赋值
dtrow[0]= DBNull.Value;
int i, k = 0;
for (i = 1; i < HttpContext.Current.Request.Form.Count- 2; i++)
{
string name = HttpContext.Current.Request.Form.GetKey(i);
if (name.IndexOf("Text")> 0)
{
k = k + 1;
dtrow[k] = HttpContext.Current.Request.Form[i];
}
}
dt.Rows.Add(dtrow);
objcmd.Update(ds, tablename);//更新DataSet
}
2.3 组件的调用
在用户界面调用表单处理组件十分简单,只需要往界面中拖入一个Panel控件和一个Button控件,然后在Page_Load事件中调用bind方法,其参数分别是Panel控件的ID号与要显示数据表的表名,再在按钮的单击事件中调用方法insert,其参数为要添加记录的数据表的表名。这样调试通过后就能看到在网页中自动生成了某张数据表提交信息所需的表单,当用户在表单中输入了信息,再单击提交按钮,信息将被添加到对应的数据表中。
参考文献:
[1]唐伟,施永香,文巨峰,基于.NET的通用查询组件的开发[J],计算机工程与设计,2006,27(14):98-100
[2]周金桥,ASP.NET夜话[M],电子工业出版社,2009.
|