DIOCP开源项目-DEMO(怎么样操作远程数据库)
2013-05-20 17:35
155 查看
经过两天时间的开源,感谢网友提出一些修改意见,特别是在XE中,做了一部分优化。
可以在SVN中下载到最新的代码
今天做了一个操作数据库的演示<这里我拿出我在实际项目中操作数据库的方法,集成在Demo中>
操作数据库比较简单,分两部分功能,第一部分打开SQL
服务端ClientContext中的处理
保存数据用到一个非常好用的DLL
客户端:
服务端:
可以在SVN中下载到最新的代码
https://code.google.com/p/diocp/
今天做了一个操作数据库的演示<这里我拿出我在实际项目中操作数据库的方法,集成在Demo中>
操作数据库比较简单,分两部分功能,第一部分打开SQL
procedure TfrmMain.btnOpenSQLClick(Sender: TObject); var lvJSonStream, lvRecvObject:TJsonStream; lvStream:TStream; lvData:AnsiString; l, j, x:Integer; begin lvJSonStream := TJsonStream.Create; try lvJSonStream.JSon := SO(); lvJSonStream.JSon.I['cmdIndex'] := 1001; //打开一个SQL脚本,获取数据 lvJSonStream.Json.S['sql'] := mmoSQL.Lines.Text; FClientSocket.sendObject(lvJSonStream); finally lvJSonStream.Free; end; //读取数据 lvRecvObject := TJsonStream.Create; try FClientSocket.recvObject(lvRecvObject); if not lvRecvObject.getResult then begin raise Exception.Create(lvRecvObject.getResultMsg); end; SetLength(lvData, lvRecvObject.Stream.Size); lvRecvObject.Stream.Position := 0; lvRecvObject.Stream.ReadBuffer(lvData[1], lvRecvObject.Stream.Size); cdsMain.XMLData := lvData; finally lvRecvObject.Free; end; end;
服务端ClientContext中的处理
procedure TClientContext.dataReceived(const pvDataObject:TObject); var lvJsonStream:TJSonStream; lvFile:String; lvCmdIndex:Cardinal; lvXMLData, lvEncodeData:AnsiString; lvSQL:String; begin lvJsonStream := TJSonStream(pvDataObject); lvCmdIndex := lvJsonStream.JSon.I['cmdIndex']; //echo测试 if lvCmdIndex= 1000 then begin InterlockedIncrement(TesterINfo.__RecvTimes); //回写数据 writeObject(lvJsonStream); end else if lvCmdIndex = 1001 then begin //根据sql获取一个数据,放在Stream中 try lvSQL := lvJsonStream.Json.S['sql']; lvXMLData := dmMain.CDSProvider.QueryXMLData(lvSQL); lvJsonStream.Clear(); lvJsonStream.Stream.WriteBuffer(lvXMLData[1], Length(lvXMLData)); lvJsonStream.setResult(True); except on e:Exception do begin lvJsonStream.Clear(); lvJsonStream.setResult(False); lvJsonStream.setResultMsg(e.Message); end; end; //回写数据 writeObject(lvJsonStream);
保存数据用到一个非常好用的DLL
客户端:
procedure TfrmMain.btnPostClick(Sender: TObject); var lvJSonStream, lvRecvObject:TJsonStream; lvStream:TStream; lvData:AnsiString; l, j, x:Integer; begin if cdsMain.State in [dsInsert, dsEdit] then cdsMain.Post; if cdsMain.ChangeCount = 0 then begin ShowMessage('没有做任何修改!'); exit; end; lvJSonStream := TJsonStream.Create; try lvJSonStream.JSon := SO(); lvJSonStream.JSon.I['cmdIndex'] := 1002; //打开一个SQL脚本,获取数据 //打包修改记录 with TCDSOperatorWrapper.createCDSEncode do begin setTableINfo(PAnsiChar(AnsiString(edtUpdateTable.Text)), PAnsiChar(AnsiString(edtKeyFields.Text))); setData(cdsMain.Data, cdsMain.Delta); //执行编码 Execute; lvData := getPackageData; end; mmoData.Clear; mmoData.Lines.Add(lvData); lvJSonStream.Stream.Write(lvData[1], Length(lvData)); FClientSocket.sendObject(lvJSonStream); finally lvJSonStream.Free; end; //读取数据 lvRecvObject := TJsonStream.Create; try FClientSocket.recvObject(lvRecvObject); if not lvRecvObject.getResult then begin raise Exception.Create(lvRecvObject.getResultMsg); end else begin ShowMessage('保存成功!'); end; finally lvRecvObject.Free; end; cdsMain.MergeChangeLog(); end;
服务端:
if lvCmdIndex = 1002 then //保存数据到熟客 begin try lvJsonStream.Stream.Position := 0; SetLength(lvEncodeData, lvJSonStream.Stream.Size); lvJsonStream.Stream.ReadBuffer(lvEnCodeData[1], lvJSonStream.Stream.Size); dmMain.ExecuteApplyUpdate(lvEncodeData); lvJsonStream.Clear(); lvJsonStream.setResult(True); except on e:Exception do begin lvJsonStream.Clear(); lvJsonStream.setResult(False); lvJsonStream.setResultMsg(e.Message); end; end; //回写数据 writeObject(lvJsonStream); end
相关文章推荐
- DIOCP开源项目-DEMO(怎么样操作远程数据库)
- DIOCP开源项目-DIOCP3 大文件的传输DEMO<断点续传>
- 将项目Demo上传到Github上的操作步骤
- Nodejs开源项目里怎么样写测试、CI和代码测试覆盖率
- 32.开源项目--git远程分支基本操作
- 关于数据库持久层操作的开源项目
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
- 将项目Demo上传到Github上的操作步骤
- DIOCP开源项目出炉,附带<IOCP退出资源的管控研究代码>
- 黑马北京新闻项目连载(4)--->ViewPagerIndicator结合FragmentPagerAdapter(开源库的Git上的demo)
- 亲 谁知道有android电子书翻页效果可运行的Demo,或github开源项目
- Android 开源绘画板项目 (ScaleSketchPadDemo)
- 简化Java日期操作的开源项目DATE4J
- 【开源项目研究】UMLet------配置文件操作
- DIOCP开源项目-测试数据库性能
- 简化Java日期操作的开源项目DATE4J,超级好用
- 源码推荐:iOS开发商品展示的不同样式Demo和微信小程序开源项目库汇总
- DIOCP开源项目 API代码的封装和流程分析
- DIOCP开源项目-数据库连接池的使用<多帐套数据库>
- 关于数据库持久层操作 的开源项目