asp.net小孔子cms中的数据添加修改

生命中,好多的事是这样,生活中,好多的情是这样,没有理由,也无需理由,爱就是爱,喜欢就是喜欢,没有结果,也无须结果,心甘情愿,无怨无悔。
题外话:我为什么研究小孔子的cms,从我自己写一个cms我就开始研究起别人的cms,早期我是研究netcms,但这系统过于庞大,看上去十分的累,也没那个精力,于是打算从一套比较小的开始研究,于是小孔子cms就进入了我的研究范围。没过多久我就放下我手中的cms,决定研究清楚有了更多经验再继续写完我没有完成的cms。 最近都在看小孔子cms的代码,其添加与修改数据十分方便,做下笔记,代码主要提取自小孔子cms,去掉了不用的函数并把相关代码写到一个文件中:

结合上面的图片,当我们要往数据库中添加数据时,代码如下: dataHandledoh=newdataHandle();
doh.AddBind(tbxWebName,"link_webname",true);
doh.AddBind(tbxWebUrl,"link_weburl",true);
doh.AddBind(tbxLogoUrl,"link_logourl",true);
doh.AddBind(tbxOrderNum,"link_ordernum",false);
doh.AddBind(ddlStyle,"link_style",false);
doh.AddBind(rblAudit,"link_audit",false);
doh.Add();
intresult=Convert.ToInt32(doh.InsertData("db_link"));
Response.Write(result.ToString());
绑定数据指的是从数据库中读取一条记录,并自动绑定到表单的控件中,代码如下(假设读取的id=8):
dataHandledoh=newdataHandle(); 
doh.AddBind(tbxWebName,"link_webname",true);
doh.AddBind(tbxWebUrl,"link_weburl",true);
doh.AddBind(tbxLogoUrl,"link_logourl",true);
doh.AddBind(tbxOrderNum,"link_ordernum",false);
doh.AddBind(ddlStyle,"link_style",false);
doh.AddBind(rblAudit,"link_audit",false);
doh.ConditionExpress="id=8";
doh.tableName="db_link";
doh.BindWhenUp();

修改数据与添加数据差不多:

dataHandledoh=newdataHandle();
doh.ConditionExpress="id=8";
doh.AddBind(tbxWebName,"link_webname",true);
doh.AddBind(tbxWebUrl,"link_weburl",true);
doh.AddBind(tbxLogoUrl,"link_logourl",true);
doh.AddBind(tbxOrderNum,"link_ordernum",false);
doh.AddBind(ddlStyle,"link_style",false);
doh.AddBind(rblAudit,"link_audit",false);
doh.Add();
intresult=Convert.ToInt32(doh.UpData("db_link"));
Response.Write(result);

而aspx文件详细代码:XML/HTML复制代码
网站:
<asp:TextBoxID="tbxWebName"runat="server"></asp:TextBox>
<br/>
<br/>
域名:<asp:TextBoxID="tbxWebUrl"runat="server"></asp:TextBox><br/>
<br/>
logo地址:<asp:TextBoxID="tbxLogoUrl"runat="server"Width="198px"></asp:TextBox><br/>
<br/>
排序:<asp:TextBoxID="tbxOrderNum"runat="server"></asp:TextBox><br/>
<br/>
是否审核:<asp:RadioButtonListID="rblAudit"runat="server"RepeatDirection="Horizontal">
<asp:ListItemValue="1">是</asp:ListItem>
<asp:ListItemSelected="True"Value="0">否</asp:ListItem>
</asp:RadioButtonList>
<br/>
<br/>
显示方式:
<br/>
<asp:DropDownListID="ddlStyle"runat="server">
<asp:ListItemValue="1">文字</asp:ListItem>
<asp:ListItemValue="2">图片</asp:ListItem>
<asp:ListItemValue="3">待定</asp:ListItem>
</asp:DropDownList><br/>
<br/>
<asp:ButtonID="btnOk"runat="server"Text="提交"OnClick="btnOk_Click"/><asp:Button
ID="btnEnter"runat="server"OnClick="btnEnter_Click"Text="绑定"/>
<asp:ButtonID="btnUp"runat="server"OnClick="btnUp_Click"Text="更改"/><br/>
<br/>
<asp:LabelID="lblResult"runat="server"Text="结果"></asp:Label></div>
我对代码做了很多注释,大家有兴趣可以看看:

usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.Data.OleDb;
usingSystem.Text; namespacemycms.DataOper.Data
{
///<summary>
///dataHandle的摘要说明
///</summary>
publicclassdataHandle
{
publicdataHandle()
{
this.conn=newOleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=|DataDirectory|mycms.mdb");
this.conn.Open();
this.cmd=conn.CreateCommand();
this.da=newOleDbDataAdapter();
} #regionwebform
//这个用来存放包括控件类型,字段,是否是字符串
publicArrayListalBinderItems=newArrayList(8); //这个只用来存放字段,值
publicArrayListalFieldItems=newArrayList(8); ///<summary>
///建立文本框到数据字段的绑定
///</summary>
publicvoidAddBind(TextBoxtbx,stringfield,boolisStringType)
{
alBinderItems.Add(newBinderItem(tbx,field,isStringType));
} ///<summary>
///下拉列表
///</summary>
publicvoidAddBind(DropDownListdd,stringfield,boolisStringType)
{
alBinderItems.Add(newBinderItem(dd,field,isStringType));
} publicvoidAddBind(RadioButtonListrb,stringfield,boolisStringType)
{
alBinderItems.Add(newBinderItem(rb,field,isStringType));
} ///<summary>
///多选框
///</summary>
publicvoidAddBind(CheckBoxListcb,stringfield,boolisStringType)
{
alBinderItems.Add(newBinderItem(cb,field,isStringType));
} ///<summary>
///需要修改数据时取出数据库中的记录填充到表单中
///</summary>
publicvoidBindWhenUp()
{
if(alBinderItems.Count==0)
{
return;
}
BinderItembi;
StringBuildersbSql=newStringBuilder("select");
for(inti=0;i<alBinderItems.Count;i++)
{
bi=(BinderItem)alBinderItems[i];
//防止出现变量名
sbSql.Append("["+bi.field+"]");
sbSql.Append(",");
}
sbSql.Remove(sbSql.Length-1,1);
sbSql.Append("from");
sbSql.Append(this.tableName);
sbSql.Append("where1=1and");
sbSql.Append(this.ConditionExpress); this.sqlCmd=sbSql.ToString();
dt=this.GetDataTable();
//如果没有记录则抛出异常
if(dt.Rows.Count==0)
{
thrownewArgumentException("记录不存在");
} DataRowdr=dt.Rows[0];
for(intj=0;j<alBinderItems.Count;j++)
{
bi=(BinderItem)alBinderItems[j];
bi.SetValue(dr[bi.field].ToString());
}
} ///<summary>
///该方法实现从alBinderItems到alFieldItems的转换,目的:alFieldItems可以转为DbKeyItem,操作数据库时需要用到DbKeyItem
///</summary>
publicvoidAdd()
{
if(this.alBinderItems.Count==0)
{
return;
}
BinderItembi=null; for(inti=0;i<alBinderItems.Count;i++)
{
bi=((BinderItem)alBinderItems[i]);
AddFieldItem(bi.field,bi.GetValue());
} } ///<summary>
///添加一个字段/值对到数组中
///</summary>
publicvoidAddFieldItem(string_fieldName,object_fieldValue)
{
_fieldName="["+_fieldName+"]";
//遍历看是否已经存在字段名 for(inti=0;i<this.alFieldItems.Count;i++)
{
if(((DbKeyItem)this.alFieldItems[i]).fieldName==_fieldName)
{
thrownewArgumentException("字段已经存在");
}
}
this.alFieldItems.Add(newDbKeyItem(_fieldName,_fieldValue));
}
#endregion
#region操作数据 #region这里声明有关数据操作的必要参数
//当前所使用的数据库连接 protectedOleDbConnectionconn; //当前所使用的命令对象
protectedOleDbCommandcmd=newOleDbCommand(); //当前所使用的数据库适配器
protectedOleDbDataAdapterda; //当前的SQL语句
publicstringsqlCmd=string.Empty; //当前操作所涉及的数据库表名
publicstringtableName=string.Empty; //SQL条件
publicstringConditionExpress; //用于存放从数据库中取得的数据记录
protectedDataTabledt;
#endregion ///<summary>
///根据当前alFieldItem数组中存储的字段/值向指定表中添加一条记录。返回自动增长id
///</summary>
///<paramname="_talbeName"></param>
///<returns></returns>
publicintInsertData(string_talbeName)
{
this.tableName=_talbeName;
this.sqlCmd="insertinto"+this.tableName+"(";
stringtemValue="values(";
for(inti=0;i<this.alFieldItems.Count;i++)
{
this.sqlCmd+=((DbKeyItem)alFieldItems[i]).fieldName+",";
temValue+="@para"+i.ToString()+",";
}
//分别去掉,
this.sqlCmd=Input.CutComma(this.sqlCmd)+")"+Input.CutComma(temValue)+")"; //声明执行语句
this.cmd.CommandText=this.sqlCmd;
GenParameters();
cmd.ExecuteNonQuery();
intautoId=0;
try
{
cmd.CommandText="select@@identityasid";
autoId=Convert.ToInt32(cmd.ExecuteScalar());
}
catch(Exceptionex)
{
thrownewException(ex.Message);
}
returnautoId; } ///<summary>
///根据当前alFieldItem数组中存储的字段/值和条件表达式所指定的条件来更新数据库中的记录,返回受影响的行数
///</summary>
///<paramname="_tableName">更新的数据表名称</param>
///<returns>返回此次操作所影响的数据行数</returns>
publicintUpData(string_tableName)
{
this.tableName=_tableName;
this.sqlCmd="update"+this.tableName+"set";
for(inti=0;i<this.alFieldItems.Count;i++)
{
this.sqlCmd+=((DbKeyItem)alFieldItems[i]).fieldName;
this.sqlCmd+="=";
this.sqlCmd+="@para";
this.sqlCmd+=i.ToString();
this.sqlCmd+=",";
}
this.sqlCmd=Input.CutComma(this.sqlCmd);
if(this.ConditionExpress!=string.Empty)
{
this.sqlCmd=this.sqlCmd+"where"+this.ConditionExpress;
}
this.cmd.CommandText=this.sqlCmd;
this.GenParameters();
inteffectedLines=this.cmd.ExecuteNonQuery();
returneffectedLines; } ///返回查询结果DataTable
publicDataTableGetDataTable()
{
DataSetds=this.GetDataSet();
returnds.Tables[0];
} ///<summary>
///根据当前指定的SqlCmd获取DataSet,如果条件表达式不为空则会被清空,
///所以条件表达式必须包含在SqlCmd中
///</summary>
publicDataSetGetDataSet()
{
this.ConditionExpress=string.Empty;
this.cmd.CommandText=this.sqlCmd;
this.GenParameters();
DataSetds=newDataSet();
this.da.SelectCommand=this.cmd;
this.da.Fill(ds);
returnds;
}
///<summary>
///产生OleDbCommand对象所需的参数
///</summary>
///<returns></returns>
protectedvoidGenParameters()
{ if(this.alFieldItems.Count>0)
{
for(inti=0;i<this.alFieldItems.Count;i++)
{
cmd.Parameters.AddWithValue("@para"+i.ToString(),((DbKeyItem)alFieldItems[i]).fieldValue.ToString());
}
}
}
#endregion
}
publicclassBinderItem
{
//每个绑定控件都以object的形式被存储的
publicobjectobj; //绑定到数据库的字段名称
publicstringfield; //是否是字符串类型
publicboolisStringType; ///<summary>
///构造函数
///</summary>
///<paramname="_o">需要绑定的控件对象</param>
///<paramname="_field">绑定到的数据表字段名称</param>
///<paramname="_isStringType">是否是字符串类型</param>
publicBinderItem(object_obj,string_field,bool_isStringType)
{
this.obj=_obj;
this.field=_field;
this.isStringType=_isStringType;
} ///<summary>
///根据控件类型获得控件的值
///</summary>
///<returns></returns>
publicstringGetValue()
{
//字符串类型
if(objisString)
{
return(string)obj;
} //下拉框
if(objisDropDownList)
{
DropDownListdd=(DropDownList)obj;
returndd.SelectedValue;
} //多选框
if(objisCheckBoxList)
{
strings=string.Empty;
CheckBoxListcb=(CheckBoxList)obj;
for(inti=0;i<cb.Items.Count;i++)
{
if(cb.Items[i].Selected)
{
s+=cb.Items[i].Value+",";
}
}
returns;
} //文本框
if(objisTextBox)
{
TextBoxtbx=(TextBox)obj;
returntbx.Text.Trim();
} //Label
if(objisLabel)
{
Labellbl=(Label)obj;
returnlbl.Text;
} //单选组
if(objisRadioButtonList)
{
RadioButtonListrb=(RadioButtonList)obj;
returnrb.SelectedValue;
}
returnstring.Empty;
} ///<summary>
///根据控件类型设定控件的值
///</summary>
///<paramname="_value">要设定的值</param>
publicvoidSetValue(string_value)
{
//字符串类型
if(objisstring)
{
strings=(string)obj;
s=_value;
return;
} //文本框
if(objisTextBox)
{
TextBoxtbx=(TextBox)obj;
tbx.Text=_value;
return;
} //单选按钮
if(objisRadioButtonList)
{
RadioButtonListrb=(RadioButtonList)obj;
rb.SelectedValue=_value;
return;
} //下拉列表
if(objisDropDownList)
{
DropDownListdd=(DropDownList)obj;
dd.SelectedValue=_value;
return;
} }
}
///<summary>
///数据表中的字段属性:字段名,字段值
///</summary>
publicclassDbKeyItem
{
///<summary>
///字段名称
///</summary>
publicstringfieldName; ///<summary>
///字段值
///</summary>
publicstringfieldValue; publicDbKeyItem(string_fileName,object_fieldValue)
{
this.fieldName=_fileName;
this.fieldValue=_fieldValue.ToString();
}
}
}
return;
} //单选按钮
if(objisRadioButtonList)
{
RadioButtonListrb=(RadioButtonList)obj;
rb.SelectedValue=_value;
return;
} //下拉列表
if(objisDropDownList)
{
DropDownListdd=(DropDownList)obj;
dd.SelectedValue=_value;
return;
} }
}
///<summary>
///数据表中的字段属性:字段名,字段值
///</summary>
publicclassDbKeyItem
{
///<summary>
///字段名称
///</summary>
publicstringfieldName; ///<summary>
///字段值
///</summary>
publicstringfieldValue; publicDbKeyItem(string_fileName,object_fieldValue)
{
this.fieldName=_fileName;
this.fieldValue=_fieldValue.ToString();
}
}
}

本文asp.net小孔子cms中的数据添加修改到此结束。不要对挫折叹气,姑且把这一切看成是在你成大事之前,必须经受的准备工作。小编再次感谢大家对我们的支持!

您可能有感兴趣的文章
ASP.NET轻量级MVC框架Nancy的基本用法

使用grpcui测试ASP.NET core的gRPC服务

ASP.NET Core中的对象池介绍

asp.net中MVC的处理流程详解

ASP.NET Core的日志系统介绍