当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > asp.net小孔子cms中的数据添加修改

ASP.NET
asp.net GridView控件中模板列CheckBox全选、反选、取消
asp.net GridView 删除时弹出确认对话框(包括内容提示)
asp.net DropDownList 三级联动下拉菜单实现代码
asp DataTable添加列和行的三种方法
Asp.net 页面调用javascript变量的值
asp.net 长文章通过设定的行数分页
asp.net 定时间点执行任务的简易解决办法
asp.net 页面延时五秒,跳转到另外的页面
asp.net 动态输出透明gif图片
asp.net DataList与Repeater用法区别
asp.net Javascript获取CheckBoxList的value
asp.net程序在调式和发布之间图片路径问题的解决方法
asp.net下生成英文字符数字验证码的代码
asp.net 页面版文本框智能提示JSCode (升级版)
ASP.NET URL伪静态重写实现方法
ASP.NET 2.0 中Forms安全认证
asp.net 动态添加多个用户控件
asp.net Repeater显示父子表数据,无闪烁
asp.net 无法获取的内部内容,因为该内容不是文本 的解决方法
asp.net GridView排序简单实现

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-11   浏览: 81 ::
收藏到网摘: n/a

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

结合上面的图片,当我们要往数据库中添加数据时,代码如下:
dataHandle doh = new dataHandle();
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();
int result = Convert.ToInt32(doh.InsertData("db_link"));
Response.Write(result.ToString());
绑定数据指的是从数据库中读取一条记录,并自动绑定到表单的控件中,代码如下(假设读取的id=8):
复制代码 代码如下:

dataHandle doh = new dataHandle();
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();

修改数据与添加数据差不多:
复制代码 代码如下:

dataHandle doh = new dataHandle();
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();
int result = Convert.ToInt32(doh.UpData("db_link"));
Response.Write(result);

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

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
using System.Text;
namespace mycms.DataOper.Data
{
/// <summary>
/// dataHandle 的摘要说明
/// </summary>
public class dataHandle
{
public dataHandle()
{
this.conn = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0;Data Source = |DataDirectory|mycms.mdb");
this.conn.Open();
this.cmd = conn.CreateCommand();
this.da = new OleDbDataAdapter();
}
#region webform
//这个用来存放包括控件类型,字段,是否是字符串
public ArrayList alBinderItems = new ArrayList(8);
//这个只用来存放字段,值
public ArrayList alFieldItems = new ArrayList(8);
/// <summary>
/// 建立文本框到数据字段的绑定
/// </summary>
public void AddBind(TextBox tbx, string field, bool isStringType)
{
alBinderItems.Add(new BinderItem(tbx, field, isStringType));
}
/// <summary>
/// 下拉列表
/// </summary>
public void AddBind(DropDownList dd, string field, bool isStringType)
{
alBinderItems.Add(new BinderItem(dd, field, isStringType));
}
public void AddBind(RadioButtonList rb, string field, bool isStringType)
{
alBinderItems.Add(new BinderItem(rb, field, isStringType));
}
/// <summary>
/// 多选框
/// </summary>
public void AddBind(CheckBoxList cb, string field, bool isStringType)
{
alBinderItems.Add(new BinderItem(cb, field, isStringType));
}
/// <summary>
/// 需要修改数据时取出数据库中的记录填充到表单中
/// </summary>
public void BindWhenUp()
{
if (alBinderItems.Count == 0)
{
return;
}
BinderItem bi;

StringBuilder sbSql = new StringBuilder("select ");
for (int i = 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(" where 1 = 1 and ");
sbSql.Append(this.ConditionExpress);
this.sqlCmd = sbSql.ToString();
dt = this.GetDataTable();
//如果没有记录则抛出异常
if (dt.Rows.Count == 0)
{
throw new ArgumentException("记录不存在");
}
DataRow dr = dt.Rows[0];
for (int j = 0; j < alBinderItems.Count; j++)
{
bi = (BinderItem)alBinderItems[j];
bi.SetValue(dr[bi.field].ToString());
}

}
/// <summary>
/// 该方法实现从alBinderItems到alFieldItems的转换,目的:alFieldItems可以转为DbKeyItem,操作数据库时需要用到DbKeyItem
/// </summary>
public void Add()
{
if (this.alBinderItems.Count == 0)
{
return;
}
BinderItem bi = null;
for (int i = 0; i < alBinderItems.Count; i++)
{
bi = ((BinderItem)alBinderItems[i]);
AddFieldItem(bi.field, bi.GetValue());
}
}
/// <summary>
/// 添加一个字段/值对到数组中
/// </summary>
public void AddFieldItem(string _fieldName, object _fieldValue)
{
_fieldName = "[" + _fieldName + "]";
//遍历看是否已经存在字段名
for (int i = 0; i < this.alFieldItems.Count; i++)
{
if (((DbKeyItem)this.alFieldItems[i]).fieldName == _fieldName)
{
throw new ArgumentException("字段已经存在");
}
}
this.alFieldItems.Add(new DbKeyItem(_fieldName, _fieldValue));
}
#endregion

#region 操作数据
#region 这里声明有关数据操作的必要参数
//当前所使用的数据库连接
protected OleDbConnection conn;
//当前所使用的命令对象
protected OleDbCommand cmd = new OleDbCommand();
//当前所使用的数据库适配器
protected OleDbDataAdapter da;
//当前的SQL语句
public string sqlCmd = string.Empty;
//当前操作所涉及的数据库表名
public string tableName = string.Empty;
//SQL条件
public string ConditionExpress;
//用于存放从数据库中取得的数据记录
protected DataTable dt;
#endregion
/// <summary>
/// 根据当前alFieldItem数组中存储的字段/值向指定表中添加一条记录。返回自动增长id
/// </summary>
/// <param name="_talbeName"></param>
/// <returns></returns>
public int InsertData(string _talbeName)
{
this.tableName = _talbeName;
this.sqlCmd = "insert into " + this.tableName + "(";
string temValue = " values(";
for (int i = 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();
int autoId = 0;
try
{
cmd.CommandText = "select @@identity as id";
autoId = Convert.ToInt32(cmd.ExecuteScalar());
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return autoId;
}
/// <summary>
/// 根据当前alFieldItem数组中存储的字段/值和条件表达式所指定的条件来更新数据库中的记录,返回受影响的行数
/// </summary>
/// <param name="_tableName">更新的数据表名称</param>
/// <returns>返回此次操作所影响的数据行数</returns>
public int UpData(string _tableName)
{
this.tableName = _tableName;
this.sqlCmd = "update " + this.tableName + " set ";
for (int i = 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();
int effectedLines = this.cmd.ExecuteNonQuery();
return effectedLines;
}
/// 返回查询结果DataTable
public DataTable GetDataTable()
{
DataSet ds = this.GetDataSet();
return ds.Tables[0];
}
/// <summary>
/// 根据当前指定的SqlCmd获取DataSet,如果条件表达式不为空则会被清空,
/// 所以条件表达式必须包含在SqlCmd中
/// </summary>
public DataSet GetDataSet()
{
this.ConditionExpress = string.Empty;
this.cmd.CommandText = this.sqlCmd;
this.GenParameters();
DataSet ds = new DataSet();
this.da.SelectCommand = this.cmd;
this.da.Fill(ds);
return ds;
}

/// <summary>
/// 产生OleDbCommand对象所需的参数
/// </summary>
/// <returns></returns>
protected void GenParameters()
{
if (this.alFieldItems.Count > 0)
{
for (int i = 0; i < this.alFieldItems.Count; i++)
{
cmd.Parameters.AddWithValue("@para" + i.ToString(), ((DbKeyItem)alFieldItems[i]).fieldValue.ToString());
}
}
}
#endregion
}

public class BinderItem
{
//每个绑定控件都以object的形式被存储的
public object obj;
//绑定到数据库的字段名称
public string field;
//是否是字符串类型
public bool isStringType;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="_o">需要绑定的控件对象</param>
/// <param name="_field">绑定到的数据表字段名称</param>
/// <param name="_isStringType">是否是字符串类型</param>
public BinderItem(object _obj, string _field, bool _isStringType)
{
this.obj = _obj;
this.field = _field;
this.isStringType = _isStringType;
}
/// <summary>
/// 根据控件类型获得控件的值
/// </summary>
/// <returns></returns>
public string GetValue()
{
//字符串类型
if (obj is String)
{
return (string)obj;
}
//下拉框
if (obj is DropDownList)
{
DropDownList dd = (DropDownList)obj;
return dd.SelectedValue;
}
//多选框
if (obj is CheckBoxList)
{
string s = string.Empty;
CheckBoxList cb = (CheckBoxList)obj;
for (int i = 0; i < cb.Items.Count; i++)
{
if (cb.Items[i].Selected)
{
s += cb.Items[i].Value + ",";
}
}
return s;
}
//文本框
if (obj is TextBox)
{
TextBox tbx = (TextBox)obj;
return tbx.Text.Trim();
}
//Label
if (obj is Label)
{
Label lbl = (Label)obj;
return lbl.Text;
}
//单选组
if (obj is RadioButtonList)
{
RadioButtonList rb = (RadioButtonList)obj;
return rb.SelectedValue;
}
return string.Empty;
}
/// <summary>
/// 根据控件类型设定控件的值
/// </summary>
/// <param name="_value">要设定的值</param>
public void SetValue(string _value)
{
//字符串类型
if (obj is string)
{
string s = (string)obj;
s = _value;
return;
}
//文本框
if (obj is TextBox)
{
TextBox tbx = (TextBox)obj;
tbx.Text = _value;
return;
}
//单选按钮
if (obj is RadioButtonList)
{
RadioButtonList rb = (RadioButtonList)obj;
rb.SelectedValue = _value;
return;
}
//下拉列表
if (obj is DropDownList)
{
DropDownList dd = (DropDownList)obj;
dd.SelectedValue = _value;
return;
}
}
}

/// <summary>
/// 数据表中的字段属性:字段名,字段值
/// </summary>
public class DbKeyItem
{
/// <summary>
/// 字段名称
/// </summary>
public string fieldName;
/// <summary>
/// 字段值
/// </summary>
public string fieldValue;
public DbKeyItem(string _fileName, object _fieldValue)
{
this.fieldName = _fileName;
this.fieldValue = _fieldValue.ToString();
}
}
}
return;
}
//单选按钮
if (obj is RadioButtonList)
{
RadioButtonList rb = (RadioButtonList)obj;
rb.SelectedValue = _value;
return;
}
//下拉列表
if (obj is DropDownList)
{
DropDownList dd = (DropDownList)obj;
dd.SelectedValue = _value;
return;
}
}
}

/// <summary>
/// 数据表中的字段属性:字段名,字段值
/// </summary>
public class DbKeyItem
{
/// <summary>
/// 字段名称
/// </summary>
public string fieldName;
/// <summary>
/// 字段值
/// </summary>
public string fieldValue;
public DbKeyItem(string _fileName, object _fieldValue)
{
this.fieldName = _fileName;
this.fieldValue = _fieldValue.ToString();
}
}
}