dotnet中实现数据表记录数据修改的代码功能.docx
《dotnet中实现数据表记录数据修改的代码功能.docx》由会员分享,可在线阅读,更多相关《dotnet中实现数据表记录数据修改的代码功能.docx(16页珍藏版)》请在冰豆网上搜索。
dotnet中实现数据表记录数据修改的代码功能
.net中实现数据表记录数据修改的代码功能
因为用直接拼接字符的方法给SQL语句传入字符存在极大的安全隐患,故以下代码采用给SQL语句传参数变量的方法,以下记录的是如何对数据库中的表记录数据进行修改的代码:
其中将用到前面介绍的实体类生成器来创建数据表对象(category),而对象中的属性则对应表中的字段。
修改的代码与插入的代码基本一样,主要是SQL语句不同,如果修改成功,会返回一个大于0的数值,否则修改失败,如果修改成功则RETURN TRUE否则FALSE,还是先看一下最终效果吧!
然后再一步步的回顾操作步骤:
1——categoryDAO.cs类的源码:
(加黑的部分是实现修改功能的代码段)
/*
*创建人:
无声岁月
*创建时间:
2009-09-03 23:
20
*新闻类别表操作类
*版权所有:
无声岁月
*/
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Data;
usingSystem.Data.SqlClient;
namespaceDAL
{
///
///新闻类别表操作类
///
publicclassCategoryDAO
{
privateSQLHelpersqlhelper=null;
publicCategoryDAO()
{
sqlhelper=newSQLHelper();
}
//取出当前所有新闻类
publicDataTableSelectAll()
{
DataTabledt=newDataTable();//建立DataTable类的新实例
stringsql="select*fromcategory";
dt=sqlhelper.ExecuteQuery(sql);//调用方法来执行传入的SQL语句并把结果集赋值给dt
returndt;
}
//增加类别
publicboolInsert(stringcaName)
{
boolflag=false;
stringsql="insertintocategory(name)values(@caName)";
SqlParameter[]paras=newSqlParameter[]{newSqlParameter("@caName",caName)};
intres=sqlhelper.ExecuteNonQuery(sql,paras);
if(res>0)
{
flag=true;
}
returnflag;
}
//修改类别
publicboolUpdate(categoryca)
{
boolflag=false;
stringsql="updatecategoryset[name]=@caNamewhereid=@id";
SqlParameter[]paras=newSqlParameter[]{
newSqlParameter("@id",ca.Id),
newSqlParameter("@caName",ca.Name)
};
intres=sqlhelper.ExecuteNonQuery(sql,paras);
if(res>0)
{
flag=true;
}
returnflag;
}
//删除类别(连同其下的新闻及新闻评论一起删除)
//判断类别名称是否存在
publicboolIsExists(stringcaName)
{
boolflag=false;
stringsql="select*fromcategorywhere[name]='"+caName+"'";
DataTablerd=sqlhelper.ExecuteQuery(sql);
if(rd.Rows.Count>0)
{
flag=true;
}
returnflag;
}
}
}
2------界面:
3)运行效果:
下图是想把ID为4的“校园新闻”改为“经济新闻”
当点击修改按钮后见到如下:
下面一步一步来实现以上功能:
方法一:
[1]categoryDAO.cs中的一段修改源码:
//修改类别
publicboolUpdate(stringid,stringcaName)
{
boolflag=false;
stringsql="updatecategoryset[name]=@caNamewhereid=@id";
SqlParameter[]paras=newSqlParameter[]{
newSqlParameter("@id",id),
newSqlParameter("@caName",caName)
};
intres=sqlhelper.ExecuteNonQuery(sql,paras);
if(res>0)
{
flag=true;
}
returnflag;
}
小小分析:
(1)publicboolUpdate(stringid,stringcaName)从界面上传入来的ID(如4)和caName
(如经济新闻)
(2)SqlParameter[]paras=newSqlParameter[]{
newSqlParameter("@id",id),
newSqlParameter("@caName",caName)
};将id和caName赋值给参数变量@id和@caName
(3)intres=sqlhelper.ExecuteNonQuery(sql,paras);将@id和@caName变量值赋给SQL语句,执行不返回结果集的SQL语句,这样res将得到一个整数,如果大于0则flag=true;否则flag=false,这个信号终反馈给Update()
[2]布局一下界面:
双击以上“修改新闻类别”按钮,进行点击事件调用代码的编写(inserttest.aspx.cs中)
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingDAL;/*倒入DAL项目*/
publicpartialclass_Default:
System.Web.UI.Page
{
protectedvoidPage_Load(objectsender,EventArgse)
{
GridView1.DataSource=newCategoryDAO().SelectAll();//调用方法,获取数据源
GridView1.DataBind();//将数据源绑定到GridView1控件
/*Response.Write(newSQLHelper().test());隐式创建类(SQLHelper)并对象调用方法:
test()*/
}
protectedvoidButton1_Click(objectsender,EventArgse)
{
stringcaName=TextBox1.Text;
stringid=TextBox2.Text;
boolb=newCategoryDAO().Update(id,caName);
Response.Write(b);
GridView1.DataSource=newCategoryDAO().SelectAll();//调用方法,获取数据源
GridView1.DataBind();//将数据源绑定到GridView1控件
}
}
小小分析:
(1)stringcaName=TextBox1.Text;
stringid=TextBox2.Text;将界面数据赋值给相应的变量
(2)boolb=newCategoryDAO().Update(id,caName);将变量数据作为参数传入Update()方法中
(3)绑定数据源
运行看看:
想把第4条记录的“经济新闻”改成“广西新闻”
单击“修改新闻”类别按钮
以上方法的弊端是:
我们的数据表中只有两个字段,但如果字段是几十个,就得在方法Update()中写入几十个的参数变量,是不是有点深长呢?
正好以下将要介绍的方法二可以很好的解决这个弊端。
方法二:
创建一个对象,对象名就是表名,对象的属性就是表中的名个字段,这就用到前面介绍的“制作生成实体类”
第一步:
创建一个类库(即Model类库)
(1)
(2)创建category对象(用实体类生成器来创建)
点击“生成实体类”按钮
保存即可,然后在解决方案资源管理中刷新并点击显示所有项就可以见到创建的category对象,请选择该对象,鼠标右键选择“包含到项目中”
双击“category.cs”见到如下图:
由上图知道,所谓的命名空间实际上就是一个类库,现在在类库Model中放了一个类(即category.cs),现在我们往类category.cs中加入一个构造函数,这样当我们为这个类创建实例时,系统就会自动对其进行初始化(把从界面输入的id和name数据赋值给这个类的属性id和name)category.cs源码如下:
/*
*作者:
无声胜有声
*创建时间:
2009-9-2818:
31:
02
*/
namespaceModel
{
publicclasscategory
{
privatestringid;
publicstringId
{
get{returnid;}
set{id=value;}
}
privatestringname;
publicstringName
{
get{returnname;}
set{name=value;}
}
publiccategory(stringid,stringname)
{
this.id=id;
this.name=name;
}
}
}
把Model倒入到DAL层中(usingModel;):
添加引用一下:
修改一下代码:
修改代码至此已完成,接下来再修改一下调用代码:
(值得注意的是凡有引用的地方都应添加Model的引用)之外还得在insertest.aspx.cs中usingModel;将每一层都重新生成一下:
运行看看:
修改数据表记录数据到此算暂时完成了。
inserttest.aspx.cs源码:
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingDAL;/*倒入DAL项目*/
usingModel;
publicpartialclass_Default:
System.Web.UI.Page
{
protectedvoidPage_Load(objectsender,EventArgse)
{
GridView1.DataSource=newCategoryDAO().SelectAll();//调用方法,获取数据源
GridView1.DataBind();//将数据源绑定到GridView1控件
/*Response.Write(newSQLHelper().test());隐式创建类(SQLHelper)并对象调用方法:
test()*/
}
protectedvoidButton1_Click(objectsender,EventArgse)
{
stringcaName=TextBox1.Text;
stringid=TextBox2.Text;
categoryca=newcategory(id,caName);
boolb=newCategoryDAO().Update(ca);
Response.Write(b);
GridView1.DataSource=newCategoryDAO().SelectAll();//调用方法,获取数据源
GridView1.DataBind();//将数据源绑定到GridView1控件
}
}
category.cs源码:
/*
*作者:
无声胜有声
*创建时间:
2009-9-2818:
31:
02
*/
namespaceModel
{
publicclasscategory
{
privatestringid;
publicstringId
{
get{returnid;}
set{id=value;}
}
privatestringname;
publicstringName
{
get{returnname;}
set{name=value;}
}
publiccategory(stringid,stringname)
{
this.id=id;
this.name=name;
}
}
}
categoryDAO.cs源码:
/*
*创建人:
无声岁月
*创建时间:
2009-09-03 23:
20
*新闻类别表操作类
*版权所有:
无声岁月
*/
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Data;
usingSystem.Data.SqlClient;
usingModel;
namespaceDAL
{
///
///新闻类别表操作类
///
publicclassCategoryDAO
{
privateSQLHelpersqlhelper=null;
publicCategoryDAO()
{
sqlhelper=newSQLHelper();
}
//取出当前所有新闻类
publicDataTableSelectAll()
{
DataTabledt=newDataTable();//建立DataTable类的新实例
stringsql="select*fromcategory";
dt=sqlhelper.ExecuteQuery(sql);//调用方法来执行传入的SQL语句并把结果集赋值给dt
returndt;
}
//增加类别
publicboolInsert(stringcaName)
{
boolflag=false;
stringsql="insertintocategory(name)values(@caName)";
SqlParameter[]paras=newSqlParameter[]{newSqlParameter("@caName",caName)};
intres=sqlhelper.ExecuteNonQuery(sql,paras);
if(res>0)
{
flag=true;
}
returnflag;
}
//修改类别
publicboolUpdate(categoryca)
{
boolflag=false;
stringsql="updatecategoryset[name]=@caNamewhereid=@id";
SqlParameter[]paras=newSqlParameter[]{
newSqlParameter("@id",ca.Id),
newSqlParameter("@caName",ca.Name)
};
intres=sqlhelper.ExecuteNonQuery(sql,paras);
if(res>0)
{
flag=true;
}
returnflag;
}
//删除类别(连同其下的新闻及新闻评论一起删除)
//判断类别名称是否存在
publicboolIsExists(stringcaName)
{
boolflag=false;
stringsql="select*fromcategorywhere[name]='"+caName+"'";
DataTablerd=sqlhelper.ExecuteQuery(sql);
if(rd.Rows.Count>0)
{
flag=true;
}
returnflag;
}
}