AJAX DataSet的使用心得<o:p></o:p>
<o:p> </o:p>
作者:玉壶冰<o:p></o:p>
<o:p> </o:p>
无论是VB、Delphi、.NET还是Java,都有提供对数据结果集的操作,有了数据结果集,我们只需要使用结果集的方法移动记录,获取记录字段数据,再结合界面,就可以很容易地完成一个数据库应用的编程,现在都流行用AJAX做基于web的系统了。
老大决定新版要用AJAX来做,给了我们用AJAX做一些试验和原型的任务,可是当我们的技术组在预研时,才发现到了web上完全不是那么回事呀,仅仅通过form表单来操作和提交数据要实现我们的设备管理真的很麻烦,以前都是用delphi三层结构,有ClientDataSet,有DCOM,MIDAS,还有我们最爱的DEV系列控件,界面以及数据的读取,操作,保存都是不需要太多程序的,我们还积累了不少框架和通用类呢。
了解了一些AJAX框架,大多是只支持java的,这次我们要用C#,也有少数.NET的AJAX开源的项目,功能就是些框架和一些不完整的类,偶和菜哥、阿狼搞了几天,还是没有搭好一个能够很好支撑我们项目开发的基础,可能我的js和html基础太差了,后来阿狼居然在网上发现有AJAX的WebShop,下了看了,居然非常像delphi,也有DataSet,还有很多数据感应的控件像DBGrid什么的,试了一下,发现这个DataSet确实厉害,竟然用javascript实现了以前的ClientDataSet,而且与数据感应控件的使用也沿袭了Delphi的模式,于是决定使用它,简单的应用也很容易,那个工具提供可视化的开发方式,也有示例,不过真正开发起来,在使用过程也遇到好多问题,幸好这个工具的开发商有在线客服,有些深入使用的功能就直接找他们问,我们的设备管理系统的原型只用了15天就搭建出来啦,AJAX确实厉害,功能上和操作方便性比以前的asp程序不知道好哪去了,哈哈。好了,言归正题,我们在做原型过程中用到最多的就是DataSet,有的时候没有使用数据感应控件,有的界面用了,我就把使用DataSet的一些心得给大家讲讲:
这个DataSet是一个客户端的AJAX数据集,完全是纯js的实现,界面与后台的数据交互基本上全是通过它进行的,包括数据的读取和提交。听他们说是用js操纵XML,能够进行分页、样式无刷新查询数据、还有如果增删改了少量数据,是实现的增量数据提交,而后台对应这个DataSet需要有相应的服务端程序,我用的是3.0版,可以支持C#,VB,Java,据他们说很快要出支持PHP的版本了,不过我们是用C#,看了他们C#的例子,好像是后台要实现两个类,一个处理取数据包括查询数据,另外一个处理数据的提交,但我们觉得封装一下似乎更好,完全可以用一个类的两个方法来写嘛,然后做一个控制层来转发。通过他们的例子和代码向导,我们知道取数据包括分页的代码(demo/Simple_Query.aspx)是这样的:
using System;
using System.Data;
using System.Data.OleDb;
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 joyistar.eip.util;
using joyistar.eip.vo;
<o:p> </o:p>
<o:p> </o:p>
public partial class Simple_Query : System.Web.UI.Page {
private String connString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source="+System.Web.HttpContext.Current.Server.MapPath(".")+"\\demo.mdb";
private String sql = "select * from product";
protected void Page_Load(object sender, EventArgs e)
{
Response.ContentType = "text/xml";
String xml = HttpParser.getXML(Request.InputStream);
XmlRequest xmlRequest = new XmlRequest();
<o:p> </o:p>
try
{
xmlRequest.Open(xml);
<o:p> </o:p>
OleDbConnection conn = new OleDbConnection(connString);
conn.Open();
OleDbCommand cmd = new OleDbCommand(sql, conn);
OleDbDataReader reader = cmd.ExecuteReader();
DataTable metadata = reader.GetSchemaTable();
int rowCount;//the row number of the table
int maxRow; //the row number displayed per page,which is one of the DataSet Propery
int recNo;
maxRow = xmlRequest.MaxRows;
recNo = xmlRequest.RecNo;
//get rowCount
string sqlCount = "select count(*) from product";
OleDbConnection MyConn = new OleDbConnection(connString);
MyConn.Open();
OleDbCommand MyComm = new OleDbCommand(sqlCount, MyConn);
rowCount = (int)(MyComm.ExecuteScalar());
if(maxRow==-1) maxRow = rowCount;
xmlRequest.SetRecordCount(rowCount);
//fill fields
foreach (DataRow row in metadata.Rows)
{
if (row["DataType"].Equals("STRING"))
{
xmlRequest.AddField(System.Convert.ToString(row["ColumnName"]), System.Convert.ToString(row["DataType"]), System.Convert.ToInt32(row["ColumnSize"]));
}
else
xmlRequest.AddField(System.Convert.ToString(row["ColumnName"]), System.Convert.ToString(row["DataType"]));
}
//fill data of the page
int count = -1;
while (reader.Read())
{
count++;
if (count >= recNo)
{
if (count < (recNo + maxRow))
{
xmlRequest.Append();
<o:p> </o:p>
foreach (DataRow row in metadata.Rows)
{
String fieldname = System.Convert.ToString(row["ColumnName"]);
String fieldvalue = reader[fieldname].ToString();
xmlRequest.SetValue(fieldname, fieldvalue);
<o:p> </o:p>
}
}
else break;
}
<o:p> </o:p>
else
{ continue; }
<o:p> </o:p>
<o:p> </o:p>
}
<o:p> </o:p>
<o:p> </o:p>
Response.Write(xmlRequest.GetXml());
Response.Flush();
<o:p> </o:p>
}
catch (Exception ex)
{
xmlRequest.SetError(ex.Message);
Response.Write(xmlRequest.GetXml());
Response.Flush();
}
finally {
<o:p> </o:p>
}
}
}
|
然后这个文件在界面上是这样使用的,选择好DataSet后,输入OpenURL属性为demo/Simple_Query.aspx,设置好这个就可以点Fields然后刷出表结构啦,当然你必须启动webserver,在那个Run里面有start webserver。对了,要能正常启动它,你需要安装有.NET Framework 2.0并在工程属性中配置好.NET路径哦:
图一
再看DataSet的其他属性,Async是设置异步还是同步模式取数据,Active是打开数据,这样页面一载入就会取数据过来,也可以在程序中调用DataSet1.Open();来打开数据,如果要做一个查询,还要先关闭数据,传入参数,再打开数据执行查询,代码类似:
function Button1onclick() {
DataSet1.Close();
DataSet1.Params.Clear();
if(Edit1.value) {
DataSet1.Params.Add(new Param('NAME',Edit1.value,'string'));
}
DataSet1.Open();
}
|
<o:p> </o:p>
当然,做查询后台也有代码,是这样写的:
// the data search code here
Param param1 = xmlRequest.GetParam("NAME");//get the search information
String sql_params = "";
if (param1 != null)
<o:p> </o:p>
{
sql_params = " where NAME='" + param1.Value+"' ";
sql += sql_params;
}
|
在使用Async=true的异步模式时,我们有时遇到很奇怪的问题,比如几个表同时打开总是出错,后来仔细一想才明白,原来是码表和主表同时打开,主表打开时码表数据还没有取到,所以就出错了,于是设置主表在码表的afteropen后打开就搞定了。
切换到DataSet的事件页,可以看到它的事件列表,双击进去加上这个控制代码:
<o:p>图二</o:p>
<o:p> </o:p>
function DataSet3OnAfterOpen(dataset) {
DataSet1.Open();
}
|
<o:p> </o:p>
另外,DataSet有一个MaxRows属性,是指定每页取多少数据的,默认是5,如果设置成-1,就会取所有的数据哦。
DataSet要实现分页,就是使用了MaxRows,还有在后台的编程实现,根据MaxRows和RecNo来取数据,RecNo就是起始记录号,还要设置总记录数以便知道有多少页,用的xmlRequest.SetRecordCount(xxx);
这里的XmlRequest是他们封装的请求对象,后台的参数映射和数据返回都是用的它,比如XmlRequest.MaxRows, XmlRequest.RecNo, XmlRequest.AddField, XmlRequest.Append, XmlRequest.SetValue,基本上常用的就这些了。
DataSet还有一个DataSource属性似乎是只有Java才会用得到,还有如果我们自己封装后台类控制层,也可以启用这个属性。
DataSet有记录移动的方法,包括First, Prev ,Next,Last,SetPos这些,然后通过DataSet.Fields.Field[“字段名”].Value, DataSet.Fields.Fieldx[“字段序号”].Value可以取或写当前记录字段的值,增加记录用Append,修改用Edit,确定用Post,提交保存用Apply,取消修改用Cancel,删除用Delete,哈哈,和resultset的操作是完全类似的。
我有些模块就是用普通Input Text,然后通过DataSet与后台交互,真是相当的方便哩,有些就直接用数据感应的Input Text和DBGrid什么的,拖拉起,设置好属性就搞定啦。
最后,DataSet的PostURL就是用来设置数据提交保存的服务路径,数据的提交比取数据要麻烦一些,涉及到增删改几种情况的处理,对了,这个DataSet来支持主从表的取数据和数据提交,这在我们的开发中是太有用了,不过编程处理也相对复杂一些,我要把这段时间的代码整理下了,好给项目组的其他人一起讲下,改天有空再写一些提交数据和主从表操作的经验。
- 描述: 图一
- 大小: 20.9 KB
- 描述: 图二
- 大小: 12.8 KB
分享到:
- 2006-12-27 14:30
- 浏览 3649
- 评论(3)
- 论坛回复 / 浏览 (3 / 6467)
- 查看更多
相关推荐
本文将详细讲解如何使用Ajax实现从数据库进行模糊查询,并将结果显示到下拉框(Dropdown List)中,这里我们将以一个具体例子——通过Ajax方法返回Dataset来阐述整个过程。 首先,我们需要在服务器端设置一个能够...
C#将对象数组转换成DataSet使用案例 本文将介绍如何将对象数组转换成DataSet,解决了在ASP.NET 2.0 beta 2开发项目中遇到的问题,即将对象数组绑定到GridView的数据源上,但GridView不支持对象数组的排序,因为...
### C#中,数据集DataSet使用方法大全 #### 一、创建DataSet对象 在C#中,`DataSet`是用于存储从数据库检索到的数据的一种内存结构。为了开始使用`DataSet`,首先需要创建一个`DataSet`对象。创建过程非常简单: ...
《iReport中Parameter、Dataset和Table的使用详解》 在报表设计领域,iReport作为一款强大的JasperReports设计工具,提供了丰富的功能,包括参数(Parameter)、数据集(Dataset)和表格(Table)的灵活运用,使得复杂的...
标题《dataset,datatable的使用详解》所涉及的知识点主要围绕.NET框架下的数据操作,特别是在VB(Visual Basic)和***环境中操作Dataset和DataTable的详细方法和技巧。 首先,Dataset是***提供的一种用于存储、...
1. 填充DataSet:通常使用SqlDataAdapter的Fill方法,从数据库获取数据并填充到DataSet中。 2. 数据更新:DataSet支持乐观并发控制,通过DataRow的RowState和OriginalValues,可以检测在提交更改期间数据库是否已被...
在本文中,我们将深入探讨如何在VS2008和ASP.NET环境中使用Ajax.dll来实现JavaScript调用后台函数接口,并获取Dataset数据。 首先,`Ajax.dll`是一个.NET框架下的组件,它为ASP.NET应用程序提供了对Ajax功能的支持...
### DataSet 转化为 List 的通用方法:深入解析与应用 在 IT 领域,数据处理是一项核心任务,特别是在数据库操作与数据展现层之间,数据格式的转换显得尤为重要。其中,`DataSet`到`List`的转换是常见的需求之一,...
综上所述,这段代码展示了一个典型的从数据库查询数据,使用`DataSet`进行数据操作,然后将其导出到Excel文件的过程。这在数据分析、报告生成或者用户交互时非常常见,确保了数据在应用程序和用户之间能够灵活地传输...
在.NET框架中,`DataSet`是一个非常重要的组件,主要用于存储和操作关系数据。它是一个内存中的数据缓存,可以...对于初学者来说,掌握`DataSet`的使用能提升你在数据处理方面的技能,为后续的开发工作打下坚实的基础。
### ASP.NET 使用 DataSet 数据集插入表记录 #### 知识点概述 在ASP.NET应用程序中,经常需要处理数据库操作,例如插入、更新或删除记录。其中一种常用的技术是使用`DataSet`来管理这些操作。`DataSet`是一个内存...
一张图让你搞明白C#中DataSet如何使用
使用数据绑定和DataSet 在软件开发中,数据绑定是指将数据集DataSet等数据对象绑定到应用程序的控件中,然后将数据显示给用户查看或者操作。数据绑定在程序开发与设计中十分重要,本章通过介绍数据绑定和数据集...
当你需要将`DataSet`的内容保存到XML文件或者通过XML字符串传输时,可以使用`DataSet`的`WriteXml`方法。这个方法接受一个文件路径或者一个`Stream`对象作为参数,然后将`DataSet`的内容以XML格式写入。例如: ``...
在“第3章 使用数据绑定和DataSet”中,你可能会学到如何创建和配置DataSet,包括定义DataTable,添加和删除数据行,以及设置和处理DataColumn。你还会学习如何使用DataAdapter填充DataSet,以及如何使用Command对象...
在.NET框架中,C#提供了一种方便的方式来处理XML数据,可以将XML文档转换为DataSet对象,以便于进一步的数据操作和处理。`XmlDataDocument`是这个过程中的关键类,它继承自`System.Xml.XmlDocument`,并添加了与.NET...
### C# 中 SqlDataAdapter 与 DataSet 的使用详解 #### 一、引言 在 C# 开发中,数据访问层的设计尤为重要。其中,`SqlDataAdapter` 和 `DataSet` 是两个非常重要的概念,它们可以帮助开发者实现从数据库到应用程序...
、可以在任何时候查看DataSet中任意行的内容,允许修改查询结果的方法。 、处理分级数据 、缓存更改 、XML的完整性:DataSet对象和XML文档几乎是可互换的。 、创建DataSet对象: 、查看调用SqlDataAdapter....
1. 安装库:使用pip命令`pip install img2dataset-1.20.2-py3-none-any.whl`进行安装。 2. 导入库:在Python脚本中导入`import img2dataset`。 3. 创建数据集:通过调用库提供的函数,指定数据源和参数,创建数据集...
在实际应用中,例如创建一个图像分类项目,你可以使用`img2dataset`来获取图片,设定预处理规则,然后直接将生成的数据集导入模型进行训练。通过这种方式,你可以专注于模型的设计和优化,而不用在数据预处理上花费...