discuz学习笔记:以easyUI DataGrid为前台进行数据库增查删改操作
2016-12-20 19:33
489 查看
编辑和新增记录的过程,本来想从前台直接向discuz后台传送json格式表单数据,发现discuz的安全过滤十分严格,直接屏蔽了。所以只能以普通方式提交表单数据。
\bgtj_crud.php
\source\class\table\table_bgtj.php
\source\module\cat\bgtj_pub_crud.php
\template\default\cat\bgtj_crud.htm
\template\default\common\header_cat.htm
\bgtj_crud.php
<?php /** * [Discuz!] (C)2001-2099 Comsenz Inc. * This is NOT a freeware, use is subject to license terms * * $Id: bgtj.php cuibq $ */ define('APPTYPEID', 101); define('CURSCRIPT', 'bgtj'); require './source/class/class_core.php'; $discuz = C::app(); $discuz->reject_robot(); $modarray = array('bgtj', 'bgtj_crud'); $mod = getgpc('mod'); $mod = (empty($mod) || !in_array($mod, $modarray)) ? 'error' : $mod; $discuz->init(); define('CURMODULE', $mod); require DISCUZ_ROOT.'./source/module/cat/bgtj_pub_crud.php'; //include_once template("cat/bgtj_publish"); ?>
\source\class\table\table_bgtj.php
<?php /** * [Discuz!] (C)2001-2099 Comsenz Inc. * This is NOT a freeware, use is subject to license terms * 工业产品表 * $Id: table_gycp.php */ if(!defined('IN_DISCUZ')) { exit('Access Denied'); } class table_bgtj extends discuz_table { public function __construct() { $this->_table = 'bgtj'; $this->_pk = 'id'; parent::__construct(); } public function fetch_all_by_displayorder() { return DB::fetch_all('SELECT * FROM %t ORDER BY id ASC', array($this->_table), $this->_pk); } public function fetch_all_by_sql($start, $limit) { return DB::fetch_all('SELECT * FROM %t ORDER BY id ASC'.DB::limit($start, $limit), array($this->_table), $this->_pk); } //返回json格式数据 public function fetch_json_by_sql($start, $limit) { $query = DB::query('SELECT * FROM %t ORDER BY id ASC'.DB::limit($start, $limit), array($this->_table), $this->_pk); $result = array(); // 记录数量 $row = DB::fetch_first('SELECT count(*) as cnt FROM %t ', array($this->_table), $this->_pk); //所有记录数量 $result["total"] = intval($row['cnt']); while($data = DB::fetch($query)){ $list[] = array( 'ID' => $data['ID'], 'XH' => $data['XH'], 'WT' => urlencode($data['WT']), 'DA' => urlencode($data['DA']) ); } $result["rows"] = $list; return urldecode(json_encode($result)); } //public function fetch_by_id_username($id, $username, $adminid = 1) { //return DB::fetch_first('SELECT * FROM %t WHERE id=%d', array($this->_table, $id, $adminid, $username)); //} // 根据id删除一条记录 public function delete_by_id($id) { $delcnt = DB::delete($this->_table, DB::field($this->_pk, $id)); // 返回删除记录数量,若为0表示删除失败 if ($delcnt == 0) { $arr = array ('msg' => 'wrong!', 'success' => false); } else { $arr = array ('msg' => 'ok!', 'success' => true); } return urldecode(json_encode($arr)); } // 根据id 编辑一条数据 public function update_by_id($ID, $form_data) { $ret = DB::update($this->_table, $form_data, "ID=$ID"); $logfile = fopen("log.txt", "w") or die("Unable to open file!"); fwrite($logfile, 'ret:'.$ret); fclose($logfile); if ($ret == 0) { $arr = array ('msg' => 'wrong!', 'success' => false); } else { $arr = array ('msg' => 'ok!', 'success' => true); } return urldecode(json_encode($arr)); } // 插入一条数据 public function insert_data($form_data, $return_insert_id, $replace, $silent) { $ret = DB::insert($this->_table, $form_data, $return_insert_id, $replace, $silent); $logfile = fopen("log.txt", "w") or die("Unable to open file!"); fwrite($logfile, 'ins result:'.$ret); fclose($logfile); if ($ret == 0) { $arr = array ('msg' => 'wrong!', 'success' => false); } else { $arr = array ('msg' => 'ok!', 'success' => true); } return urldecode(json_encode($arr)); } //public function delete_by_ids($ids, $adminid = 1) { //if(($ids = dintval((array)$ids, true))) { //DB::query('DELETE FROM %t WHERE id IN(%n)', array($this->_table, $ids), false, true); //} //} //public function update_displayorder_by_id_username($id, $displayorder, $username, $adminid = 1) { //if(($id = dintval((array)$id, true))) { //DB::query('UPDATE %t SET displayorder=%d WHERE id IN(%n)', array($this->_table, $displayorder, $id, $adminid, $username), false, true); //} //} //public function update_by_id_username($id, $data, $username, $adminid = 1) { //if(($id = dintval($id, true)) && $data && is_array($data)) { //$adminid = dintval($adminid); //DB::update($this->_table, $data, DB::field($this->_pk, $id).')', true); //} //} } ?>
\source\module\cat\bgtj_pub_crud.php
<?php // mod文件只能被入口文件引用,不能直接访问 if(!defined('IN_DISCUZ')) { exit('Access Denied'); } require_once libfile('function/discuzcode'); // ------------------------------------------- // 分页 require_once libfile('function/home'); $perpage = empty($_GET['rows'])?0:intval($_GET['rows']);//页码 $perpage = mob_perpage($perpage); $page = empty($_GET['page'])?0:intval($_GET['page']);//页码 if($page<1) $page = 1; $start = ($page-1)*$perpage;//开始记录 //ckstart($start, $perpage);//分页判断 //$count = C::t('bgtj')->count();//所有记录数量 //$mpurl = 'bgtj.php'; // ============================================ $action = $_GET['ac']; $action = dhtmlspecialchars($action); $ID = $_GET['ID']; $ID = dhtmlspecialchars($ID); //$querydata = C::t('bgtj')->fetch_all_by_sql($start, $perpage); //$queryarr = array(); //foreach ($querydata as $rec) { //$queryarr[] = $rec; //} //$multipage = multi($count, $perpage, $page, $mpurl); //echo 'aaa:'.$action; //exit; //$get_json = C::t('bgtj')->fetch_json_by_sql($start, $perpage); // 动作请求 ac=g if ($action == 'g'){ // 取得json格式数据 $get_json = C::t('bgtj')->fetch_json_by_sql($start, $perpage); echo $get_json; exit; } // 删除一条数据 elseif ($action == 'd') { echo C::t('bgtj')->delete_by_id($ID); exit; } // 编辑一条数据 elseif ($action == 'e') { $XH = dhtmlspecialchars($_GET['XH']); $WT = dhtmlspecialchars($_GET['WT']); $DA = dhtmlspecialchars($_GET['DA']); $form_data = array(); $form_data['XH'] = $XH; $form_data['WT'] = $WT; $form_data['DA'] = $DA; echo C::t('bgtj')->update_by_id($ID, $form_data); exit; } // 插入一条数据 elseif ($action == 'a') { $XH = dhtmlspecialchars($_GET['XH']); $WT = dhtmlspecialchars($_GET['WT']); $DA = dhtmlspecialchars($_GET['DA']); $form_data = array(); $form_data['XH'] = $XH; $form_data['WT'] = $WT; $form_data['DA'] = $DA; $return_insert_id = false; $replace = false; $silent = false; echo C::t('bgtj')->insert_data($form_data, $return_insert_id, $replace, $silent); exit; } else { //显示发布表单 include_once template("cat/bgtj_crud"); } ?>
\template\default\cat\bgtj_crud.htm
<!--//说明: 显示公共头部模板--> <!--{template common/header_cat_edata}--> <br> <table id="dg" class="easyui-datagrid" style="width:1000px;height:400px" toolbar="#toolbar" idField="ID" data-options=" singleSelect:true, collapsible:true, url: '/upload/bgtj_crud.php?ac=g', pagination:true, method:'get', " title="公务员常识题库" iconCls="icon-save" rownumbers="true" pagination="true"> <thead> <tr> <th field="ID" width="50">ID</th> <th field="XH" width="50">序号</th> <th field="WT" width="500" align="left">问题</th> <th field="DA" width="400" align="left">答案</th> </tr> </thead> </table> <div id="toolbar"> <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-add" plain="true" onclick="newUser()">新增</a> <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-edit" plain="true" onclick="editUser()">编辑</a> <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-remove" plain="true" onclick="destroyUser()">删除</a> </div> <div id="dlg" class="easyui-dialog" style="width:400px" closed="true" buttons="#dlg-buttons"> <form id="fm" method="post" novalidate style="margin:0;padding:20px 50px"> <div style="margin-bottom:20px;font-size:14px;border-bottom:1px solid #ccc">问题</div> <div style="margin-bottom:10px"> <input name="ID" class="easyui-textbox" required="true" label="ID:" style="width:100%"> </div> <div style="margin-bottom:10px"> <input name="XH" class="easyui-textbox" required="true" label="序号:" style="width:100%"> </div> <div style="margin-bottom:10px"> <input name="WT" class="easyui-textbox" required="true" label="问题:" style="width:100%"> </div> <div style="margin-bottom:10px"> <input name="DA" class="easyui-textbox" required="true" label="答案:" style="width:100%"> </div> </form> </div> <div id="dlg-buttons"> <a href="javascript:void(0)" class="easyui-linkbutton c6" iconCls="icon-ok" onclick="saveUser()" style="width:90px">保存</a> <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg').dialog('close')" style="width:90px">取消</a> </div> <script type="text/javascript"> var url; $.fn.serializeObject = function() { var o = {}; var a = this.serializeArray(); $.each(a, function() { if (o[this.name]) { if (!o[this.name].push) { o[this.name] = [o[this.name]]; } o[this.name].push(this.value || ''); } else { o[this.name] = this.value || ''; } }); return o; }; function newUser(){ $('#dlg').dialog('open').dialog('center').dialog('setTitle','新增'); $('#fm').form('clear'); url = '/upload/bgtj_crud.php?ac=a'; } function editUser(){ var row = $('#dg').datagrid('getSelected'); if (row){ $('#dlg').dialog('open').dialog('center').dialog('setTitle','编辑'); $('#fm').form('load',row); url = '/upload/bgtj_crud.php?ac=e&ID='+row.ID; } } function saveUser(){ $('#fm').form('submit',{ url: url, onSubmit: function(){ return $(this).form('validate'); }, success: function(result){ var result = eval('('+result+')'); if (result.errorMsg){ $.messager.show({ title: 'Error', msg: result.errorMsg }); } else { $('#dlg').dialog('close'); // close the dialog $('#dg').datagrid('reload'); // reload the user data } } }); } function destroyUser(){ var row = $('#dg').datagrid('getSelected'); if (row){ $.messager.confirm('请确认','您真的要删除这条记录吗?',function(r){ if (r){ $.post('/upload/bgtj_crud.php?ac=d',{ID:row.ID},function(result){ if (result.success){ $('#dg').datagrid('reload'); // reload the user data } else { $.messager.show({ // show error message title: '出错啦', msg: result.errorMsg }); } },'json'); } }); } } </script> <!--//说明: 显示公共尾部模板--> <!--{template common/footer}-->
\template\default\common\header_cat.htm
<!--{subtemplate common/header_common}--> <meta name="application-name" content="$_G['setting']['bbname']" /> <meta name="msapplication-tooltip" content="$_G['setting']['bbname']" /> <!--{if $_G['setting']['portalstatus']}--><meta name="msapplication-task" content="name=$_G['setting']['navs'][1]['navname'];action-uri={echo !empty($_G['setting']['domain']['app']['portal']) ? 'http://'.$_G['setting']['domain']['app']['portal'] : $_G[siteurl].'portal.php'};icon-uri={$_G[siteurl]}{IMGDIR}/portal.ico" /><!--{/if}--> <meta name="msapplication-task" content="name=$_G['setting']['navs'][2]['navname'];action-uri={echo !empty($_G['setting']['domain']['app']['forum']) ? 'http://'.$_G['setting']['domain']['app']['forum'] : $_G[siteurl].'forum.php'};icon-uri={$_G[siteurl]}{IMGDIR}/bbs.ico" /> <!--{if $_G['setting']['groupstatus']}--><meta name="msapplication-task" content="name=$_G['setting']['navs'][3]['navname'];action-uri={echo !empty($_G['setting']['domain']['app']['group']) ? 'http://'.$_G['setting']['domain']['app']['group'] : $_G[siteurl].'group.php'};icon-uri={$_G[siteurl]}{IMGDIR}/group.ico" /><!--{/if}--> <!--{if helper_access::check_module('feed')}--><meta name="msapplication-task" content="name=$_G['setting']['navs'][4]['navname'];action-uri={echo !empty($_G['setting']['domain']['app']['home']) ? 'http://'.$_G['setting']['domain']['app']['home'] : $_G[siteurl].'home.php'};icon-uri={$_G[siteurl]}{IMGDIR}/home.ico" /><!--{/if}--> <!--{if $_G['basescript'] == 'forum' && $_G['setting']['archiver']}--> <link rel="archives" title="$_G['setting']['bbname']" href="{$_G[siteurl]}archiver/" /> <!--{/if}--> <!--{if !empty($rsshead)}-->$rsshead<!--{/if}--> <!--{if widthauto()}--> <link rel="stylesheet" id="css_widthauto" type="text/css" href='{$_G['setting']['csspath']}{STYLEID}_widthauto.css?{VERHASH}' /> <script type="text/javascript">HTMLNODE.className += ' widthauto'</script> <!--{/if}--> <!--{if $_G['basescript'] == 'forum' || $_G['basescript'] == 'group'}--> <script type="text/javascript" src="{$_G[setting][jspath]}forum.js?{VERHASH}"></script> <!--{elseif $_G['basescript'] == 'home' || $_G['basescript'] == 'userapp'}--> <script type="text/javascript" src="{$_G[setting][jspath]}home.js?{VERHASH}"></script> <!--{elseif $_G['basescript'] == 'portal'}--> <script type="text/javascript" src="{$_G[setting][jspath]}portal.js?{VERHASH}"></script> <!--{/if}--> <!--{if $_G['basescript'] != 'portal' && $_GET['diy'] == 'yes' && check_diy_perm($topic)}--> <script type="text/javascript" src="{$_G[setting][jspath]}portal.js?{VERHASH}"></script> <!--{/if}--> <!--{if $_GET['diy'] == 'yes' && check_diy_perm($topic)}--> <link rel="stylesheet" type="text/css" id="diy_common" href="{$_G['setting']['csspath']}{STYLEID}_css_diy.css?{VERHASH}" /> <!--{/if}--> <!--cbq--> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="./easyui/themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="./easyui/themes/icon.css"> <link rel="stylesheet" type="text/css" href="./easyui/themes/color.css"> <link rel="stylesheet" type="text/css" href="./easyui/demo/demo.css"> <script type="text/javascript" src="./easyui/jquery.min.js"></script> <script type="text/javascript" src="./easyui/jquery.easyui.min.js"></script> <!--/cbq--> </head> <body id="nv_{$_G[basescript]}" class="pg_{CURMODULE}{if $_G['basescript'] === 'portal' && CURMODULE === 'list' && !empty($cat)} {$cat['bodycss']}{/if}" onkeydown="if(event.keyCode==27) return false;"> <div id="append_parent"></div><div id="ajaxwaitid"></div> <!--{if $_GET['diy'] == 'yes' && check_diy_perm($topic)}--> <!--{template common/header_diy}--> <!--{/if}--> <!--{if check_diy_perm($topic)}--> <!--{template common/header_diynav}--> <!--{/if}--> <!--{if CURMODULE == 'topic' && $topic && empty($topic['useheader']) && check_diy_perm($topic)}--> $diynav <!--{/if}--> <!--{if empty($topic) || $topic['useheader']}--> <!--{if $_G['setting']['mobile']['allowmobile'] && (!$_G['setting']['cacheindexlife'] && !$_G['setting']['cachethreadon'] || $_G['uid']) && ($_GET['diy'] != 'yes' || !$_GET['inajax']) && ($_G['mobile'] != '' && $_G['cookie']['mobile'] == '' && $_GET['mobile'] != 'no')}--> <div class="xi1 bm bm_c"> {lang your_mobile_browser}<a href="{$_G['siteurl']}forum.php?mobile=yes">{lang go_to_mobile}</a> <span class="xg1">|</span> <a href="$_G['setting']['mobile']['nomobileurl']">{lang to_be_continue}</a> </div> <!--{/if}--> <!--{if $_G['setting']['shortcut'] && $_G['member'][credits] >= $_G['setting']['shortcut']}--> <div id="shortcut"> <span><a href="javascript:;" id="shortcutcloseid" title="{lang close}">{lang close}</a></span> {lang shortcut_notice} <a href="javascript:;" id="shortcuttip">{lang shortcut_add}</a> </div> <script type="text/javascript">setTimeout(setShortcut, 2000);</script> <!--{/if}--> <div id="toptb" class="cl"> <!--{hook/global_cpnav_top}--> <div class="wp"> <div class="z"> <!--{loop $_G['setting']['topnavs'][0] $nav}--> <!--{if $nav['available'] && (!$nav['level'] || ($nav['level'] == 1 && $_G['uid']) || ($nav['level'] == 2 && $_G['adminid'] > 0) || ($nav['level'] == 3 && $_G['adminid'] == 1))}-->$nav[code]<!--{/if}--> <!--{/loop}--> <!--{hook/global_cpnav_extra1}--> </div> <div class="y"> <a id="switchblind" href="javascript:;" onclick="toggleBlind(this)" title="{lang switch_blind}" class="switchblind">{lang switch_blind}</a> <!--{hook/global_cpnav_extra2}--> <!--{loop $_G['setting']['topnavs'][1] $nav}--> <!--{if $nav['available'] && (!$nav['level'] || ($nav['level'] == 1 && $_G['uid']) || ($nav['level'] == 2 && $_G['adminid'] > 0) || ($nav['level'] == 3 && $_G['adminid'] == 1))}-->$nav[code]<!--{/if}--> <!--{/loop}--> <!--{if empty($_G['disabledwidthauto']) && $_G['setting']['switchwidthauto']}--> <a href="javascript:;" id="switchwidth" onclick="widthauto(this)" title="{if widthauto()}{lang switch_narrow}{else}{lang switch_wide}{/if}" class="switchwidth"><!--{if widthauto()}-->{lang switch_narrow}<!--{else}-->{lang switch_wide}<!--{/if}--></a> <!--{/if}--> <!--{if $_G['uid'] && !empty($_G['style']['extstyle'])}--><a id="sslct" href="javascript:;" onmouseover="delayShow(this, function() {showMenu({'ctrlid':'sslct','pos':'34!'})});">{lang changestyle}</a><!--{/if}--> <!--{if check_diy_perm($topic)}--> $diynav <!--{/if}--> </div> </div> </div> <!--{if !IS_ROBOT}--> <!--{if $_G['uid']}--> <ul id="myprompt_menu" class="p_pop" style="display: none;"> <li><a href="home.php?mod=space&do=pm" id="pm_ntc" style="background-repeat: no-repeat; background-position: 0 50%;"><em class="prompt_news{if empty($_G[member][newpm])}_0{/if}"></em>{lang pm_center}</a></li> <li><a href="home.php?mod=follow&do=follower"><em class="prompt_follower{if empty($_G[member][newprompt_num][follower])}_0{/if}"></em><!--{lang notice_interactive_follower}-->{if $_G[member][newprompt_num][follower]}($_G[member][newprompt_num][follower]){/if}</a></li> <!--{if $_G[member][newprompt] && $_G[member][newprompt_num][follow]}--> <li><a href="home.php?mod=follow"><em class="prompt_concern"></em><!--{lang notice_interactive_follow}-->($_G[member][newprompt_num][follow])</a></li> <!--{/if}--> <!--{if $_G[member][newprompt]}--> <!--{loop $_G['member']['category_num'] $key $val}--> <li><a href="home.php?mod=space&do=notice&view=$key"><em class="notice_$key"></em><!--{echo lang('template', 'notice_'.$key)}-->(<span class="rq">$val</span>)</a></li> <!--{/loop}--> <!--{/if}--> <!--{if empty($_G['cookie']['ignore_notice'])}--> <li class="ignore_noticeli"><a href="javascript:;" onclick="setcookie('ignore_notice', 1);hideMenu('myprompt_menu')" title="{lang temporarily_to_remind}"><em class="ignore_notice"></em></a></li> <!--{/if}--> </ul> <!--{/if}--> <!--{if $_G['uid'] && !empty($_G['style']['extstyle'])}--> <div id="sslct_menu" class="cl p_pop" style="display: none;"> <!--{if !$_G[style][defaultextstyle]}--><span class="sslct_btn" onclick="extstyle('')" title="{lang default}"><i></i></span><!--{/if}--> <!--{loop $_G['style']['extstyle'] $extstyle}--> <span class="sslct_btn" onclick="extstyle('$extstyle[0]')" title="$extstyle[1]"><i style='background:$extstyle[2]'></i></span> <!--{/loop}--> </div> <!--{/if}--> <!--{if $_G['uid']}--> <ul id="myitem_menu" class="p_pop" style="display: none;"> <li><a href="forum.php?mod=guide&view=my">{lang mypost}</a></li> <li><a href="home.php?mod=space&do=favorite&view=me">{lang favorite}</a></li> <li><a href="home.php?mod=space&do=friend">{lang friends}</a></li> <!--{hook/global_myitem_extra}--> </ul> <!--{/if}--> <!--{subtemplate common/header_qmenu}--> <!--{/if}--> <!--{ad/headerbanner/wp a_h}--> <div id="hd"> <div class="wp"> <div class="hdc cl"> <!--{eval $mnid = getcurrentnav();}--> <h2><!--{if !isset($_G['setting']['navlogos'][$mnid])}--><a href="{if $_G['setting']['domain']['app']['default']}http://{$_G['setting']['domain']['app']['default']}/{else}./{/if}" title="$_G['setting']['bbname']">{$_G['style']['boardlogo']}</a><!--{else}-->$_G['setting']['navlogos'][$mnid]<!--{/if}--></h2> <!--{template common/header_userstatus}--> </div> <div id="nv"> <a href="javascript:;" id="qmenu" onmouseover="delayShow(this, function () {showMenu({'ctrlid':'qmenu','pos':'34!','ctrlclass':'a','duration':2});showForummenu($_G[fid]);})">{lang my_nav}</a> <ul> <!--{loop $_G['setting']['navs'] $nav}--> <!--{if $nav['available'] && (!$nav['level'] || ($nav['level'] == 1 && $_G['uid']) || ($nav['level'] == 2 && $_G['adminid'] > 0) || ($nav['level'] == 3 && $_G['adminid'] == 1))}--><li {if $mnid == $nav[navid]}class="a" {/if}$nav[nav]></li><!--{/if}--> <!--{/loop}--> </ul> <!--{hook/global_nav_extra}--> </div> <!--{if !empty($_G['setting']['plugins']['jsmenu'])}--> <ul class="p_pop h_pop" id="plugin_menu" style="display: none"> <!--{loop $_G['setting']['plugins']['jsmenu'] $module}--> <!--{if !$module['adminid'] || ($module['adminid'] && $_G['adminid'] > 0 && $module['adminid'] >= $_G['adminid'])}--> <li>$module[url]</li> <!--{/if}--> <!--{/loop}--> </ul> <!--{/if}--> $_G[setting][menunavs] <div id="mu" class="cl"> <!--{if $_G['setting']['subnavs']}--> <!--{loop $_G[setting][subnavs] $navid $subnav}--> <!--{if $_G['setting']['navsubhover'] || $mnid == $navid}--> <ul class="cl {if $mnid == $navid}current{/if}" id="snav_$navid" style="display:{if $mnid != $navid}none{/if}"> $subnav </ul> <!--{/if}--> <!--{/loop}--> <!--{/if}--> </div> <!--{ad/subnavbanner/a_mu}--> <!--{subtemplate common/pubsearchform}--> </div> </div> <!--{hook/global_header}--> <!--{/if}--> <div id="wp" class="wp">
相关文章推荐
- [学习笔记]Silverlight+WCF对数据库进行操作
- springboot+mybatis+easyui 前台实现数据库信息的增删改操作
- PHP学习笔记(七):前台用户登陆、后台匹配数据库进行校验
- JUnit学习笔记20---对数据库应用程序进行单元测试4
- 【VC++ 中使用ADO操作数据库学习笔记】 基础环境的设置
- PHP学习笔记(2)--PHP数据库操作基本知识
- EasyUI----DataGrid行明细增删改操作
- SQLITE学习笔记二(数据库管理,命令行操作)
- unity3d数据库操作学习笔记
- MySQL入门很简单-学习笔记 - 第 5 章 操作数据库
- [perl学习笔记]perl数据库操作(很简单的,没有任何)
- QT sqlite3数据库读取、容器操作、文件读写——学习笔记。
- PHP学习笔记之三 数据库基本操作
- PHP学习笔记(2)--PHP数据库操作基本知识
- Python学习笔记十(pymssql数据库操作)
- JUnit学习笔记19---对数据库应用程序进行单元测试3
- ASP.NET学习笔记:数据库操作 (2009.11.10)
- 【VC++ 中使用ADO操作数据库学习笔记】_ConnectionPtr指针的基本用法
- MySQL入门很简单-学习笔记 - 第 5 章 操作数据库