- 浏览: 615702 次
- 性别:
- 来自: 卡哇伊
-
文章分类
- 全部博客 (299)
- C# (25)
- Java (1)
- WinForm (0)
- Asp.Net (86)
- Jsp (2)
- Php (1)
- Web Service (0)
- Desgin Patterns (19)
- Data Structure & Algorithms (1)
- SQLserver (41)
- Mysql (0)
- Oracle (2)
- Javascript (50)
- Ajax (10)
- Jquery (1)
- Flex (0)
- Regular Expression (5)
- DIV+CSS+XHTML+XML (18)
- Software Test (0)
- Linux (0)
- Utility (17)
- Net Digest (4)
- windows 2003 (10)
- Other (4)
- English (1)
- IT Term (1)
最新评论
-
w497480098h:
学习了 很好谢谢
SQL Server下无限多级别分类查询解决办法(简单查询树形结构数据库表) -
main_fun:
确实不错
iframe自适应高度 -
jveqi:
...
DBA -
mxcie:
其它版本没有确认,今天使用vs2003时,其.sln文件也需要 ...
彻底删除项目的VSS源代码管理信息 -
moneyprosper:
就只有IE支持,火狐和谷歌都不支持此种方法。正在寻找中。。。
从父页面读取和操作iframe中内容方法
插入和查询:
using System; using System.Collections; using System.Configuration; using System.Data; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Data.SqlClient; public partial class Default6 : System.Web.UI.Page { //定义连接 SqlConnection conn; //加载连接字符串 String connString = System.Configuration.ConfigurationManager.ConnectionStrings["sql2005"].ToString(); //定义数据适配器 SqlDataAdapter adapter; protected void Page_Load(object sender, EventArgs e) { //绑定数据 /*注意如果在这里设置仅第一次访问绑定数据 添加会出错,因为 adapter = new SqlDataAdapter("select * from zzx", conn); 定义在DataBinds()方法里.在Button1_Click事件中会找不到,所以定义每次加载 页面则执行DataBinds(); */ DataBinds(); } protected void DataBinds() { DataSet ds = new DataSet(); conn = new SqlConnection(connString); adapter = new SqlDataAdapter("select * from zzx", conn); adapter.Fill(ds); /*注意SqlCommandBuilder类根据创建DataAdapter对象的过程中 指定的select语句自动创建insert,update,delete语句.使用简单的 * select语句的时候SqlCommandBuilder类非常有用.但可以的是,当 * DataAdapter对象由多表select命令创建的时候,就不能使用SqlCommandBuilder * 类了. */ SqlCommandBuilder scb = new SqlCommandBuilder(adapter); this.GridView1.DataSource = ds.Tables[0].DefaultView; this.GridView1.DataBind(); } protected void Button1_Click(object sender, EventArgs e) { //创建临时数据集(在内存中创建) DataSet tempds = new DataSet(); //填充临时数据集 adapter.Fill(tempds); //从数据集中得到第一个虚拟表(虚拟表在内存中),并创建一行 DataRow dr = tempds.Tables[0].NewRow(); //在该行通过列索引添加数据 dr["categories"] = this.TextBox1.Text; dr["descrpition"] = this.TextBox2.Text; //最后将该行数据添加到该数据集的第一个虚拟表中 tempds.Tables[0].Rows.Add(dr); ////如果没有SqlCommandBuilder类的情况下,必须指定以下被注释的内容: ////设置sql命令为插入数据 //SqlCommand comm = new SqlCommand("insert into zzx values (@categories,@description)", conn); ////设置参数需要与数据库的列相匹配 //comm.Parameters.Add("@categories", SqlDbType.VarChar, 50, "categories"); //comm.Parameters.Add("@description", SqlDbType.Text, 2000, "descrpition"); ////设置适配器插入的sql指令 //adapter.InsertCommand = comm; //最后把该数据集内容更新到数据库 adapter.Update(tempds); //绑定刷新数据 DataBinds(); } }
删除和更新:
.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default7.aspx.cs" Inherits="Default7" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>无标题页</title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowEditing="RowEdit_RowEditing" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowUpdating="GridView1_RowUpdating" DataKeyNames="id,categories,descrpition" OnRowDeleting="GridView1_RowDeleting"> <Columns> <asp:BoundField HeaderText="分类ID" DataField="Id" ReadOnly="true" Visible="false" /> <asp:BoundField HeaderText="分类名" DataField="Categories" ReadOnly="true" /> <asp:BoundField HeaderText="描述" DataField="Descrpition" /> <asp:CommandField HeaderText="编辑" EditText="Edit" UpdateText="Update" CancelText="Cancel" ShowEditButton="true" /> <asp:CommandField HeaderText="删除" DeleteText="Delete" ShowDeleteButton="true" /> </Columns> </asp:GridView> </div> </form> </body> </html>
.aspx.cs:
using System; using System.Collections; using System.Configuration; using System.Data; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Data.SqlClient; public partial class Default7 : System.Web.UI.Page { private String connString = System.Configuration.ConfigurationManager.ConnectionStrings["sql2005"].ToString(); private SqlConnection conn; private SqlDataAdapter adapter; private String TableName = "Categories"; DataSet ds; protected void Page_Load(object sender, EventArgs e) { conn = new SqlConnection(connString); ds = new DataSet(); adapter = new SqlDataAdapter("select * from zzx", conn); adapter.Fill(ds, TableName); if (!IsPostBack) { GetDateBind(); } } /// <summary> /// 绑定数据 /// </summary> protected void GetDateBind() { this.GridView1.DataSource = ds.Tables[TableName].DefaultView; this.GridView1.DataBind(); } /// <summary> /// 编辑事件 /// </summary> protected void RowEdit_RowEditing(object sender, GridViewEditEventArgs e) { //指定GridView编辑索引为当前选择编辑行索引 this.GridView1.EditIndex = e.NewEditIndex; GetDateBind(); } /// <summary> /// 行编辑的取消事件 /// </summary> protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { //取消编辑只需要把EditIndex改为-1即可 this.GridView1.EditIndex = -1; GetDateBind(); } /// <summary> /// 编辑的更新事件 /// </summary> protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { /*通过DataKeys集合取到文本框原始列的值(就是数据库的值) 注意:在使用DataKeys集合取数据时必须在GridView的DatakeyNames 属性中设置绑定GridView列名,否则用DataKey去去数据会索引越界 DataKeys集合是通过DatakeyNames集合的索引来取值的 */ int id = Convert.ToInt32(this.GridView1.DataKeys[e.RowIndex][0]); //取到要更新描述信息的值,描述值在GridView选取行的第三列,取到编辑后文本框的值 String descript = (this.GridView1.Rows[e.RowIndex].Cells[2].Controls[0] as TextBox).Text; //调用更新的方法 UpdateDescript(id, descript); this.GridView1.EditIndex = -1; GetDateBind(); } /// <summary> /// 更新方法 /// </summary> /// <param name="id">分类表的id</param> /// <param name="description">分类表的描述decsription</param> protected void UpdateDescript(int id, string description) { //得到数据集 DataTable dt = ds.Tables[TableName]; //查找数据集中数据必须指定主键列,也可以指定多个主键列(组合键)查找. dt.PrimaryKey = new DataColumn[] { dt.Columns["id"] }; //在DataTable行集合中通过参数id查找的是和先前指定主键列匹配的值 //如果主键列(组合键)为多个那么可以在Find方法中的参数为:Find(new Object(id,name)) DataRow row = dt.Rows.Find(id); //更新查找到该行的descrpition列中的数据 row["descrpition"] = description; //执行更新命令 adapter.UpdateCommand = new SqlCommand("update zzx set descrpition=@description where id=@id", conn); //创建一个参数对象 SqlParameter param = new SqlParameter(); //指定更新参数 param = adapter.UpdateCommand.Parameters.Add("@description", SqlDbType.Text); //指定源列(数据集的列名)为descrpition param.SourceColumn = "descrpition"; //指定源列(数据集的列名)版本为当前版本 param.SourceVersion = DataRowVersion.Current; param = adapter.UpdateCommand.Parameters.Add("@id", SqlDbType.Int); param.SourceColumn = "id"; param.SourceVersion = DataRowVersion.Original; //判断数据集中的数据是否又更新,删除,修改的列 if (ds.HasChanges()) { //更新数据 adapter.Update(dt); } } /// <summary> /// 删除行事件 /// </summary> protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { DataTable dt = ds.Tables[TableName]; int id = Convert.ToInt32(this.GridView1.DataKeys[e.RowIndex][0]); adapter.DeleteCommand = new SqlCommand("delete from zzx where id=@id", conn); adapter.DeleteCommand.Parameters.Add("@id", SqlDbType.Int, 4, "id"); //删除多行的方式用循环来删除不错.如果删除单行可以采用前面的DataRow的Find方法查找删除. foreach (DataRow dr in ds.Tables[TableName].Rows) { if (Convert.ToInt32(dr["id"]) == id) { dr.Delete(); } } adapter.Update(dt); GetDateBind(); } }
总结:
DataSet操作数据库原理:
ADO.NET通过检查在DataSet对象中的特定表的所有记录来决定
对数据库中的那条记录进行更新,添加,删除.当数据库中的的记录填充DataSet
对象时,ADO.net会为每个字段保存两个副本:初始值和当前值.
如果需要的话可以在表达式中指定需要的值来分别访问这两值
SqlCommandBuilder类的原理:
sqlCommandBuilder scb=new SqlCommandBuilder(adapter);
通过SqlCommandBuilder的构造函数传入一个SqlDataAdapter的对象,
该构造函数会使用SQL 的Update语句,(基于适配器对象的select命令)
来创建一个SqlCommand对象,然后将该Command对象指定给数据适配器的
UpdateCommand属性.SqlCommandBuilder类同样可以构建Insert和delete命令,
会在您创建的实例时自动完成.
SqlCommandBuilder对象虽然能够完成Insert,Delete,Update命令创建工作,
但是它是有缺点的,至少他们存在着如下限制:
1.它只能用于单个数据库表中的记录,如果又两个以上数据库表,将不能构建命令.
2.指定给DataAdapter对象的SelectCommand属性的SQL语句必须要返回一个包含唯一
识别返回记录值的列(也就是必须包含主键,一般来说是通过主键来保证的.)
3.如果SelectCommand属性变化了,必须调用适配器对象的RefreshSchema()方法来更新
元数据,它用于生成Insert,Update,Delete命令.
如果你的情况符合上述限制中任何一条,CommandBuilder对象都不会为你工作
很多时候都是用手工来创建的.
发表评论
-
JS操作RadioButtonList
2009-12-16 23:25 3905function IsUpPic() { ... -
asp.net跳转页面的三种方法比较
2009-10-22 14:16 25461.Response.redir ... -
ASP.NET网站中的安全问题
2009-10-20 16:57 1197在网络经常看到网站被 ... -
新闻内容页分页的简单做法
2009-10-10 10:08 1228该例子只是提供了基本思路 很简单的做法,这个是假设数 ... -
Asp.net控件开发学习笔记(二)-控件开发基础
2009-10-03 16:49 1349接上篇…….. 看System.Web.UI.Ht ... -
Asp.net控件开发学习笔记-控件开发基础(一)
2009-10-03 16:33 1253服务器控件开发基础 当开发一个服务器控件时,首 ... -
Asp.net用户退出,清空Session,重定向登陆页面
2009-09-28 16:22 4185protected void Page_Load(object ... -
frameset中的aspx无法Postback
2009-09-28 16:07 1508<frameset cols="150,*&q ... -
.net页面定时刷新的几种简单方式
2009-09-28 11:20 59321: window.setTimeout("win ... -
动态添加TextBox
2009-09-21 16:30 1692方法1: 前台代码: <f ... -
浅谈ASP.NET管道优化
2009-09-20 21:43 1019ASP.NET管道优化 位于请求管道中的很多ASP.NET默 ... -
Asp.net 页面返回到上一页面
2009-09-20 21:20 921/// <summary> / ... -
PrecompiledApp.config文件和Global.asax 文件中的事件的关联
2009-09-19 10:24 2796在用Microsoft Visual Studio 2005开 ... -
gridview列 数字、货币和日期 显示格式
2009-09-11 17:05 1543在设置gridview等数据绑定控件的模版列时,总要 ... -
ASP.NET 打开新窗口几种方法
2009-09-09 21:44 3351ASP.NET打开新窗口方法一: Response ... -
response.addHeader("Content-Disposition","attachment; filename="+filename)中的中文乱码
2009-08-31 15:10 3269两种解决方法 1.如果web.config里utf-8 直接S ... -
技巧和诀窍:如何在VS 2005 SP1中使用VS的web服务器运行一个相对于根目录“/”的网站
2009-08-31 08:29 871大家常有一个疑问,是 ... -
Request.ServerVariables详细说明及代理
2009-08-14 10:46 2153ServerVariables是环境变量的集合。允许读取HTT ... -
DataList和Repeat无数据时提示暂无数据几种方法
2009-08-11 18:45 25791.放一个label DataTable table ... -
Asp.Net中清空所有textbox的几种方法
2009-08-08 08:53 5198用反射: FieldInfo[] info ...
相关推荐
它支持CRUD(创建、读取、更新和删除)操作,使得在客户端处理和分析数据变得方便。 接着,我们来看如何通过Web服务获取DataSet。Web服务通常基于SOAP(Simple Object Access Protocol)或REST(Representational ...
.NET的CRUD(Create, Read, Update, Delete)实例是基于.NET框架进行数据库操作的基本示例,主要用于演示如何使用编程语言如C#或VB.NET与SQL Server数据库进行交互。在这个例子中,我们看到的是使用Visual Studio ...
DataSet提供了强类型的数据操作,可以方便地进行CRUD(创建、读取、更新、删除)操作。 数据库同步是指保持数据库系统中多个副本的一致性。在DataSet和数据库之间进行同步通常涉及以下几个步骤: 1. **填充DataSet...
6. **数据操作**:提供CRUD(创建、读取、更新、删除)操作的方法,如`insert()`,`select()`,`update()`和`delete()`。 7. **序列化与反序列化**:为了保存和恢复DataSet的状态,可以实现序列化和反序列化功能。PHP...
总的来说,这个案例展示了如何结合使用DataSet、GridView和ASP.NET事件处理机制来实现对数据库数据的CRUD(创建、读取、更新和删除)操作。通过这种离线数据处理模式,开发者可以提供更灵活的用户体验,同时保持与...
在本项目"C#用VS实现CRUD操作(作业)"中,我们将探讨如何使用Microsoft Visual Studio(VS)作为集成开发环境(IDE),结合C#语言来实现数据库的基本 CRUD(Create, Read, Update, Delete)操作。CRUD是任何数据...
ADO.NET通过Connection对象连接数据库,使用Command对象执行SQL命令,DataAdapter对象用于填充DataSet或DataTable,而DataReader对象则用于高效地读取大量数据。 2. **连接Access数据库**: 要连接到Access数据库...
DataSet通常包括TClientDataSet、TDataset、TTable等组件,它们提供了数据的CRUD(创建、读取、更新和删除)操作。在这个实例中,我们可能看到如何将这些数据集组件中的数据转换为Excel格式,从而生成一个.XLS文件。...
在实例部分,教程可能通过一个具体的数据库操作示例,如CRUD(创建、读取、更新、删除)操作,来展示如何利用DataSet和DataAdapter。你将学习如何创建一个新的DataAdapter,连接到数据库,编写SQL查询,填充DataSet...
它支持数据的CRUD(创建、读取、更新和删除)操作,并且可以处理数据的关联关系。 `DataGridView`控件是Winform中用于显示表格数据的强大工具。它可以与多种数据源进行绑定,包括`DataSet`、`DataTable`或数组等。...
DataSet通过DataTable对象提供了对数据的CRUD(创建、读取、更新和删除)操作,使得在没有实时连接数据库的情况下也能进行数据处理。 其次,项目中提到了TreeView控件的使用。TreeView是Windows Forms中的一种控件...
VB.NET可以使用SQL SELECT语句或者ADO.NET中的DataSet、DataView等组件来实现。开发者通常会创建一个查询,然后用结果填充控件,如DataGridView,展示给用户。 更新(Update):当需要修改现有记录时,VB.NET会使用...
- **数据操作**:DataSet提供了DataTable、DataRow、DataColumn等对象,支持CRUD(创建、读取、更新、删除)操作。 - **事件驱动**:DataSet中的DataTable会触发RowChanging、RowDeleted等事件,便于在数据更改时...
在这个项目中,SQL Server 2005是数据存储的平台,可能通过ADO.NET的DataSet、DataTable、SqlCommand等对象进行数据操作。 为了实现这个功能,开发者需要熟练掌握以下技术: - ASP.NET控件:如GridView,用于在...
实验七的目的是让学生掌握如何利用DataSet和DataAdapter来访问SQL Server数据库,进行基本的CRUD(创建、读取、更新、删除)操作。DataSet是.NET框架中的一个离线数据存储区域,它可以存储从数据库检索的数据,并...
除了基本的CRUD操作,SqlHelper还提供了一些其他功能,如ExecuteScalar(用于获取单个值,如COUNT(*)),以及ExecuteDataset(用于获取DataSet对象,用于多表查询)。 **四、SqlHelper的优势** 1. **代码复用**:...
- **DataSet** 支持添加、删除、修改行和列,可以实现对数据的离线更改,然后通过DataAdapter将这些更改同步回数据库,适合于需要进行CRUD操作(创建、读取、更新、删除)的应用。 - **DataReader** 不支持此类...
通过ADO.NET的Dataset或DataAdapter,可以从数据库查询数据并填充到数据网格视图中,使得用户可以浏览所有记录。 3. 更新(Update):当用户需要修改数据时,可以通过选择数据网格视图中的行来编辑数据,然后使用...
在WinForm应用中,开发者可能使用了数据绑定技术,将数据源(如DataTable或DataSet)与UI控件关联,实现数据的实时更新和展示。 7. **批处理操作**: 项目描述中提到“小批量写入数据”,这可能涉及到`Batch SQL`...
3. 数据访问对象(DAO)或Entity Framework:在C#中,可以使用ADO.NET的DataSet、DataTable、DataAdapter等类直接操作Access数据库。或者,如果项目规模较大,可能采用Entity Framework,这是一个更高级的对象关系...