`

ADO.NET—Asp.net 用DataSet对象更新数据(SqlDataAdapter)

    博客分类:
  • C#
阅读更多

大家知道,DataSet保存的数据是位于服务器内存里面的原数据库的“副本”。所以用DataSet更新数据的过程就是先对“副本”进行更新,然后在将“原本”更新,按照我的理解就是把“原本”覆盖掉。具体到过程,首先是要找到需要更新的行,然后赋新值,最后更新原数据库。
  要找到需要修改的行,比较方便的做法就是根据记录中的某个值进行查找,这样比用“列号”“行号”什么的方便多了。要做到这一点,首先就是要给数据库指定一个主键,然后即可按照主键进行查找。要注意的是这个主键必须要是在程序中指定的,并且这个主键不一定和你数据库原来有的主键一样。
  然后就是最后的更新,当然是用DataAdapter的Update()方法借助CommandBuilder来实现,要注意的是,如果你的数据库一开始没有定义主键,那进行更新的时候会出错,返回的错误将是“对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成。”这是因为我们用的Update()实际上是通过CommandBuilder动态生成sql语句,然后才进行的数据库操作。但如果你在一开始创建DataAdapter时的那个sql语句没有包含有主键的列的话,那CommandBuilder将不会发生作用。这一点是必须要牢记的。
  说了这么多,如果有不明白的就看下面的程序,这个是我练习时写的,里面有一些个人的设定,比如记录名什么的,相信大家一看就明白。
<%@import namespace="System.Data"%>
<%@import namespace="System.Data.OleDb"%>
<script language="c#" runat="server">
//定义处理更新的方法
//因为是简单示例,所以这个程序已经简化,直接进行更新
//这里有两个参数,第一个用来查找需要更新的行,第二个是要修改的值
private void up_date(int ids,string names){
//连接字符串,不明白的可以看本专题第二篇文章
string connstr=ConfigurationSettings.AppSettings["color"];
OleDbConnection conn=new OleDbConnection(connstr);
string sql="select * from member";
OleDbDataAdapter ada=new OleDbDataAdapter(sql,conn);//建立一个DataAdapter对象
//这里的CommandBuilder对象一定不要忘了,一般就是写在DataAdapter定义的后面
OleDbCommandBuilder cb=new OleDbCommandBuilder(ada);
DataSet ds=new DataSet();//建立DataSet对象
conn.Open();//打开连接
ada.Fill(ds,"mems");//填充DataSet
conn.Close();//注意及时关闭连接
DataTable dt=ds.Tables["mems"];//建立一个DataTable对象,方便操作
dt.PrimaryKey=new DataColumn[]{dt.Columns["id"]};//建立一个主键
DataRow dr=dt.Rows.Find(ids);//根据参数查找到需要修改的行

dr["name"]=names;//对需要修改的记录赋新值
ada.Update(ds,"mems");//用DataAdapter的Update()方法进行数据库的更新
}
//定义用来响应按钮单击事件的方法
private void b1_Click(object sender,System.EventArgs e){
if(Page.IsValid){
int ids=Int32.Parse(idst.Text);//取得要修改的行的id值,并转换成int类型
string names=namest.Text;//取得新值
up_date(ids,names);//调用我们定义的方法处理
lb1.Text="ok!";
</script>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>用dataset更新记录</title>
</head>
<body>
<asp:Label id="lb1" runat="server"/>
<form runat="server">
<asp:TextBox id="idst" runat="server"/>
<asp:RequiredFieldValidator id="rfv1" ControlToValidate="idst" ErrorMessage="error!" runat="server"/>
<asp:TextBox id="namest" runat="server"/>
<asp:RequiredFieldValidator id="rfv2" ControlToValidate="namest" ErrorMessage="error!" runat="server"/>
<asp:Button id="b1" Text="here!!" OnClick="b1_Click" runat="server"/>
</form>
</body>
</html>
补充一点,如果想设多于两个的主键的话,可以用这个
dt.PrimaryKey=new DataColumn[]{dt.Columns["id"],dt.Columns["id2"]};
就是给数组添加两个值,然后使用的时候:
Object[] keyValues=new object[1]; //这里必须实例化否则会向你要初值
//而且需要后面方括号中的这个索引范围
keyValues[0]=(object)key1;
keyValues[1]=(object)key2;
...... 另外一种写法
Object[] keyValues={(object)key1,(object)key2};//以楣举方式赋初值

很明白了吧 :)

分享到:
评论
1 楼 john2007 2009-05-26  
有没有办法使没有主键的表也能更新?
赐教!

相关推荐

    面向对象分析制作ASP.NET+ADO.NET项目开发实例

    4. 实现数据访问层:使用ADO.NET的类,如SqlConnection、SqlCommand、SqlDataAdapter等,编写代码来连接数据库、执行CRUD操作。 5. 创建业务逻辑层:定义服务接口和实现,封装数据访问层的操作,提供给前端调用。 6....

    一个ADO.NET数据库操作实例

    ADO.NET是微软.NET框架中用于访问数据库的核心组件,它提供了一组全面的接口和类,使得开发者能够高效地处理数据库连接、数据查询、数据更新和数据传输。在本实例中,我们将深入探讨如何使用ADO.NET进行数据库操作,...

    ADO与ADO.NET编程指南PDF,本书深入浅出地介绍了ado与ado.net编程,介绍用这两种API编写适用于各种数据源和前端的数据访问代码等。

    - SqlDataAdapter对象:在数据库和DataSet之间传输数据的桥梁。 5. ADO与ADO.NET的区别: - 连接方式:ADO通常使用连续连接,而ADO.NET支持断开连接模式,降低了网络负载。 - 缓存机制:ADO.NET的DataSet提供了...

    《ADO.NET专业项目实例开发》源代码

    3. **数据适配器与数据集**:`SqlDataAdapter`是ADO.NET的核心组件,用于填充`DataSet`对象。`Fill`方法用于从数据库中获取数据并填充到数据集中,而`Update`方法则将数据集中的更改写回数据库。 4. **数据读取器**...

    ADO.NET 2.0技术内幕(高清 中文 带书签 全)

    第Ⅱ部分 获取连接:使用.NET数据提供程序 第3章 连接数据库 3.1 生成SqlConnection对象 3.2 打开SqlConnection对象 3.3 关闭SqlConnection对象 3.4 自行清除连接 3.5 连接字符串 3.6 连接池 3.7 将SqlConnection...

    Microsoft ADO.NET 4 Step by Step

    5. SqlDataAdapter:这是将数据从数据库填充到DataSet或DataTable,以及更新数据库的主要桥梁。它使用SelectCommand、InsertCommand、UpdateCommand和DeleteCommand对象来管理数据操作。 6. DataSet和DataTable:...

    ado.net使用方法与用法

    7. **数据绑定**:在ASP.NET中,可以使用ADO.NET对象与控件如GridView、FormView等进行数据绑定,实现动态数据显示和用户交互。 8. **异步操作**:在高并发场景下,使用`BeginExecuteNonQuery`和`...

    asp.ado.net

    - **对象模型**:ADO.NET引入了`DataSet`、`DataTable`、`DataColumn`等对象,这些对象提供了丰富的数据操作能力,如数据筛选、排序、更新等。 - **数据访问方式**:ADO.NET支持断开式数据访问,即数据可以先加载到...

    ADO.NET数据库访问

    7. 数据绑定:ADO.NET可以方便地与Windows Forms或ASP.NET控件进行数据绑定,例如,使用`DataGrid`、`DataGridView`控件显示数据库中的数据。 8. 错误处理和异常:在进行数据库操作时,应捕获并处理可能抛出的`...

    ado.net课程设计

    4. 数据适配器(SqlDataAdapter,OleDbDataAdapter,OdbcDataAdapter):数据适配器是数据连接和数据集之间的桥梁,它用于填充DataSet对象,或者将DataSet中的更改同步回数据库。 5. 数据集(DataSet)和数据表...

    ata考证题库(ado.net)

    #### 五、数据更新 - **Update Command**:定义如何将更改应用回数据库的SQL语句或存储过程。 - **Update Method**:使用DataAdapter的`Update`方法将更改写回到数据库。 - **RowState**:表示DataRow的状态,如...

    ADO.net数据库开发

    - 存储机制:ADO的Recordset对象通常代表单一表,而ADO.NET的DataSet对象可以包含多个DataTable,模拟了数据库中的多表关系。 - 在线与离线:ADO的Recordset需要实时保持与数据库的连接,而ADO.NET的DataSet可以在...

    ADO.NET管理数据库

    - ADO.NET是Microsoft开发的数据访问技术,用于在.NET Framework应用程序中访问关系型数据库和其他数据源。 - 组成部分包括`SqlConnection`、`SqlCommand`、`SqlDataAdapter`、`DataSet`等对象。 7. **熟悉ADO...

    利用ADO.net实现信息管理

    2. 数据适配器:`SqlDataAdapter`是数据访问的桥梁,它可以填充`DataSet`,也可以更新数据库。 3. 数据集:`DataSet`作为内存中的数据容器,存储从数据库检索的数据。 4. 数据操作:`SqlCommand`类用于执行SQL命令,...

    ADO.Net完全攻略

    - **ASP.NET数据库编程**:针对ASP.NET应用,介绍如何使用ADO.NET进行基本的数据库操作,如数据读取、插入、更新和删除等。 #### 六、总结 通过上述知识点的梳理,我们可以看出ADO.NET不仅仅是一种数据访问技术,更...

    在线选课系统(ADO.NET)

    4. **数据适配器和数据集**:使用SqlDataAdapter对象填充DataSet,将数据库中的数据加载到内存中。在不连接数据库的情况下,可以通过DataSet进行数据操作,然后使用DataAdapter的Update方法将更改同步回数据库。 5....

    ADO.net程序设计上机考题

    5. **数据适配器和数据集**: `SqlDataAdapter`是ADO.NET中的一个重要组件,它用于填充`DataSet`或更新数据库。考生需了解如何配置适配器,设置其`SelectCommand`和`UpdateCommand`,以及如何使用`Fill()`方法填充...

    ADO.net数据库连接示例程序

    9. **数据绑定**:ADO.NET数据集可以轻松地与Windows Forms或ASP.NET控件绑定,实现数据展示和用户交互。 以上是ADO.NET数据库连接的基本概念和使用方式,实际应用中还可能涉及更多复杂场景,如分页查询、批量插入...

    ADO.NET(c#)

    它负责将SQL Server数据读取到DataSet中,或反之将DataSet中的数据更新回SQL Server数据库。使用`SqlDataAdapter`时,需要定义一个`SqlCommand`对象来执行SQL语句,然后使用`SqlDataAdapter.Fill`方法将数据加载到...

    学生成绩管理ado.net

    通过ADO.NET,我们可以使用DataSet、DataTable和DataRow等对象来构建一个离线数据集,模拟数据库中的表结构,从而处理和操作学生数据。同时,可以使用DataAdapter来连接数据库,执行SQL查询以获取或更新学生信息。 ...

Global site tag (gtag.js) - Google Analytics