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
- 浏览 3671
- 评论(3)
- 论坛回复 / 浏览 (3 / 6478)
- 查看更多
相关推荐
然而,这仍然需要Web服务器与数据库之间的交互,可能导致用户在页面间切换时感受到延迟。 2. **改进的分页原理** 利用AJAX(异步JavaScript和XML)技术,可以实现更高效的分页。在这种方案中,服务器首先通过存储...
可能使用了SQL Server作为后端数据库,通过ADO.NET的DataSet、DataTable等对象进行数据操作,或是利用Entity Framework的ORM(对象关系映射)特性简化数据库操作。 4. **安全性与权限管理** 系统的安全性至关重要...
分享个人在微服务架构、DevOps实践、前端框架React等方面的最新探索和心得。 #### 职业规划与期望 包括职业目标、技能提升方向、期望的工作环境和团队文化等,以及对未来行业的预测和个人定位。
内容概要:本文详细介绍了基于结构不变补偿的电液伺服系统低阶线性主动干扰抑制控制(ADRC)方法的实现过程。首先定义了电液伺服系统的基本参数,并实现了结构不变补偿(SIC)函数,通过补偿非线性项和干扰,将原始系统转化为一阶积分链结构。接着,设计了低阶线性ADRC控制器,包含扩展状态观测器(ESO)和控制律,用于估计系统状态和总干扰,并实现简单有效的控制。文章还展示了系统仿真与对比实验,对比了低阶ADRC与传统PID控制器的性能,证明了ADRC在处理系统非线性和外部干扰方面的优越性。此外,文章深入分析了参数调整与稳定性,提出了频域稳定性分析和b0参数调整方法,确保系统在参数不确定性下的鲁棒稳定性。最后,文章通过综合实验验证了该方法的有效性,并提供了参数敏感性分析和工程实用性指导。 适合人群:具备一定自动化控制基础,特别是对电液伺服系统和主动干扰抑制控制感兴趣的科研人员和工程师。 使用场景及目标:①理解电液伺服系统的建模与控制方法;②掌握低阶线性ADRC的设计原理和实现步骤;③学习如何通过结构不变补偿简化复杂系统的控制设计;④进行系统仿真与实验验证,评估不同控制方法的性能;⑤掌握参数调整与稳定性分析技巧,确保控制系统在实际应用中的可靠性和鲁棒性。 阅读建议:本文内容详尽,涉及多个控制理论和技术细节。读者应首先理解电液伺服系统的基本原理和ADRC的核心思想,然后逐步深入学习SIC补偿、ESO设计、控制律实现等内容。同时,结合提供的代码示例进行实践操作,通过调整参数和运行仿真,加深对理论的理解。对于希望进一步探索的读者,可以关注文中提到的高级话题,如频域稳定性分析、参数敏感性分析等,以提升对系统的全面掌控能力。
蓝桥杯嵌入式
PCB_PCB_2021-01-22_16-58-07_2025-03-02.json
【项目资源】: 适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
内容概要:汇编语言是一种低级编程语言,它作为计算机硬件与高级语言间的桥梁,使用助记符表示机器指令。起源于20世纪40年代末至50年代初,目的是替代难以理解的机器语言。汇编语言的特点在于高效性和灵活性,可直接与硬件交互,充分利用硬件资源。它广泛应用于操作系统开发(如中断处理、内存管理)、嵌入式系统(如实时控制系统)以及对安全性和可靠性要求极高的软件开发中。学习汇编语言有助于深入了解计算机工作原理,提升程序性能优化、复杂问题调试及高性能软件开发的能力,培养逻辑思维和关注细节的习惯。; 适合人群:对计算机底层原理感兴趣的程序员、计算机科学专业学生或希望深入理解计算机硬件与软件交互机制的人士。; 使用场景及目标:①理解计算机底层工作原理;②提高程序性能优化能力;③增强复杂问题调试技巧;④开发高性能、高可靠性的软件。; 其他说明:尽管现代编程更多使用高级语言,但汇编语言的学习价值依然很高,特别是在涉及硬件交互和性能优化方面。建议学习时结合实际项目进行练习,以加深理解。
【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
本书名为《Web Programming for Business: PHP Object-Oriented Programming with Oracle》,由David Paper撰写,主要面向希望在商业环境中解决数据和技术问题的学生。本书采用Oracle作为后端数据库,内容版本中立,即使PHP和Oracle发生变更,书中代码依然有效。书中代码示例清晰,注重解决方案,并详细解释了如何利用XML、RSS和AJAX等技术在商业应用中。章节内容涵盖了数据库功能、安全编程以及数据转换编程。此外,书中还提供了PowerPoint幻灯片、应用考试题目和示例代码的源文件,旨在通过实例教学帮助读者掌握PHP面向对象编程。大卫·佩珀教授拥有德州仪器和IBM等大公司的实际工作经验,目前在美国犹他州立大学教授计算机科学和商业专业。
内容概要:本文详细解析了一个用于电动汽车转弯制动时ABS(防抱死系统)与DYC(横摆力矩控制)协同工作的Simulink模型。模型采用7自由度设计,涵盖纵向、横向、横摆运动及四轮旋转自由度,并引入轮胎魔术公式来精确模拟轮胎力特性。文章重点介绍了ABS系统中的滑移率观测与PID控制策略,以及DYC系统的滑模控制设计,特别是两者之间的协同控制逻辑。通过双移线工况测试验证,该模型能够显著提高车辆稳定性,将横摆角控制在3度以内,并缩短制动距离1.2米。文中还提供了关于模型优化、参数调试的具体建议,以及针对特定工况的仿真技巧。 适合人群:从事车辆控制系统开发的工程师、研究生及对汽车主动安全技术感兴趣的科研人员。 使用场景及目标:①研究ABS与DYC在电动汽车中的协同控制机制;②探索不同路面条件下车辆动态性能优化;③为ESP或TCS系统开发提供参考模型;④比较滑模控制与LQR控制在车辆控制中的应用效果。 阅读建议:建议读者重点关注7自由度模型的设计思路、轮胎魔术公式的实现方式、滑模控制参数调试过程以及ABS和DYC协同控制策略。由于模型涉及较多数学公式和Simulink实现细节,建议结合相关文献深入理解,并通过实际仿真加深认识。
# 基于LVGL图形库的PC模拟器 ## 项目简介 本项目是基于LVGL图形库的PC模拟器。LVGL是为嵌入式系统设计的开源图形库,用于创建嵌入式系统的图形用户界面。该项目将LVGL移植到PC上,让开发者无需嵌入式硬件,就能在PC上进行LVGL应用的开发、调试和测试,节约成本且能提升开发效率。 ## 项目的主要特性和功能 1. 跨平台支持可在Windows、Linux和OSX等操作系统上运行。 2. 图形用户界面模拟借助LVGL图形库的各种GUI组件和工具进行模拟。 3. 模拟输入设备能模拟鼠标和键盘的输入操作。 4. 灵活调试通过PC模拟器开发和调试应用程序,便于查找和修复错误。 5. Docker支持便于在Docker容器中运行和测试项目。 ## 安装使用步骤 假设用户已经下载了本项目的源码文件 ### 安装依赖
【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
【项目资源】: 适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
内容概要:本文介绍了SymPy,一个用于符号数学的Python库。SymPy起源于2007年,由Ondřej Čertík和Aaron Meurer发起,现已发展成一个活跃的开源社区项目。SymPy的核心功能包括符号计算、数学表达式的解析与简化、微积分、线性代数、物理学和工程学应用、可视化、代码生成等。它支持符号变量的创建和基本代数运算,能求解方程、执行符号积分与微分、计算极限与级数、进行矩阵操作等。此外,SymPy在物理问题(如量子力学中的谐振子问题和经典力学中的运动方程)和数学问题(如函数图形和矩阵变换的可视化)的实际应用中表现出色。安装SymPy可通过pip完成,安装后可通过导入库来验证安装是否成功。SymPy与NumPy的区别在于前者专注于符号数学,后者侧重于数值计算。调试SymPy代码时,可以使用print语句、pprint函数、simplify函数以及断点和调试器等工具。 适合人群:对符号数学感兴趣的程序员、研究人员、教师和学生,尤其是那些希望在Python环境中进行数学研究和教育的人群。 使用场景及目标:①用于符号数学计算,如代数运算、微积分、解方程等;②在物理学和工程学中解析和求解微分方程;③结合Matplotlib等库进行数学表达式的可视化;④将符号表达式转换为其他编程语言的代码,适用于高性能计算和嵌入式系统。 阅读建议:由于SymPy涵盖了广泛的数学功能,建议读者从基础功能入手,逐步深入到高级应用。同时,结合实际案例和可视化工具,以更好地理解和掌握SymPy的强大功能。在学习过程中,可以利用提供的调试工具确保代码的正确性。
安装包
# 基于Spring Boot框架的ABrowse基因组浏览器 ## 项目简介 ABrowse是一款轻量级的通用基因组浏览器框架,目标是助力生物学家搭建便捷易用的基因组浏览器。其可视化引擎在浏览器端运行,能为用户带来出色的交互体验。该框架支持GTF、BedGraph、SAM等数据格式以及自定义的存储转录剪接位点的数据格式,数据可通过其提供的接口导入本地mongoDB,开发者还能基于API扩展对更多数据格式的支持。此外,ABrowse支持为同一种数据格式提供多种可视化形式,并且可以借助JavaScript API进一步添加更多可视化方法。软件采用Browser Server架构,后端运用Spring Boot框架,前端由HTML5 + JavaScript实现。 ## 项目的主要特性和功能 1. 多数据格式支持支持GTF、BedGraph、SAM等常见格式以及自定义的转录剪接位点数据格式。
解码 -getitem- 和 -len- - 自定义序列的钥匙
# 基于Raspberry Pi和INA226芯片的直流电压电流监测系统 ## 项目简介 ## 主要特性和功能 1. 实时监测通过INA226芯片实时采集直流电压和电流数据。 2. JSON输出默认输出格式为JSON,便于后续处理和分析。 3. 硬件兼容性支持多种Raspberry Pi型号,硬件连接简单。 4. 配置灵活支持自定义I2C地址、分流电阻值、最大预期电流等参数。 5. 模拟器支持提供无需硬件的模拟器,便于开发和测试。 6. 测试支持包含简单的测试脚本,确保代码的正确性。 ## 安装和使用步骤 ### 1. 硬件设置 确保Raspberry Pi的I2C功能已启用,可以通过raspiconfig或在bootconfig.txt中取消注释dtparami2carmon来实现。 将INA226芯片的GND、SDA、SCL引脚连接到Raspberry Pi对应的I2C引脚。