shape {select ...} append ({select ...} RELATE ID TO PARAMETER 0,ID TO PARAMETER 1)
1、问题描述
最近在写vb.net的时候,碰到了一个有点棘手的问题。就是在vb里面去解决一对多的关系。
对应关系如下,一个合同会对应多个开票。

最简单暴力的方法就是循环查询了,但是这样子肯定不行的。如果是java的话可以写个合同BO类,然后里面有个List<开票类>,但我用的语言是vb,没有java这么好用。后来我去和其他同事请教,才知道在vb.net ADO里面有个操作,可以操控sql语句的返回形式叫:shape append relate。
2、解决方法
wsc
Public Function ListAAA()
dim cn,rs,sSQL
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open CS_RS
cn.CursorLocation = 3
sSQL = sSQL & "SHAPE{"
sSQL = sSQL & "select top 100 A.ID,A.ContractNumber from Intranet..tbTestSaleContract A "
sSQL = sSQL & "}"
sSQL = sSQL & "APPEND"
sSQL = sSQL & "({"
sSQL = sSQL & "select B.ID as invoiceId,B.contractId,B.InvoiceType from Intranet..tbTestInvoiceApply B where B.contractId=? "
sSQL = sSQL & "}"
sSQL = sSQL & "RELATE ID TO PARAMETER 0"
sSQL = sSQL & ") as rsBillingInfo"
rs.Open sSQL,cn
Set ListAAA = rs
End Function
asp
<%
Response.Charset="gb2312"
Set dbTest = CreateObject("dbTest.wsc")
Set rs=dbTest.ListAAA()
do while not rs.eof
Set rs1=rs("rsBillingInfo").value
do while not rs1.eof
Response.write "合同号:"&rs("ContractNumber")&","&"开票类型:"&rs1("InvoiceType")&","&"开票ID:"&rs1("invoiceId")&"<br/>"
rs1.MoveNext
loop
rs.MoveNext
loop
%>
或者我把wsc和asp合并一下,直接在前端asp使用ADO技术操作数据库
<%
Response.Charset="gb2312"
dim cn,sSQL,CS_RS
Set cn = CreateObject("ADODB.Connection")
CS_RS="Driver={SQL Server};Server=127.0.0.1;Uid=xxx;Pwd=xxxx;Provider=xxx;Database=xxxx;"
sSQL = sSQL & "SHAPE{"
sSQL = sSQL & "select top 100 A.ID,A.ContractNumber from Intranet..tbTestSaleContract A "
sSQL = sSQL & "}"
sSQL = sSQL & "APPEND"
sSQL = sSQL & "({"
sSQL = sSQL & "select B.ID as invoiceId,B.contractId,B.InvoiceType from Intranet..tbTestInvoiceApply B where B.contractId=? "
sSQL = sSQL & "}"
sSQL = sSQL & "RELATE ID TO PARAMETER 0"
sSQL = sSQL & ") as rsBillingInfo"
cn.Open CS_RS
Set rs=cn.Execute(sSQL)
do while not rs.eof
Set rs1=rs("rsBillingInfo").value
do while not rs1.eof
Response.write "合同号:"&rs("ContractNumber")&","&"开票类型:"&rs1("InvoiceType")&","&"开票ID:"&rs1("invoiceId")&"<br/>"
rs1.MoveNext
loop
rs.MoveNext
loop
rs.Open sSQL,cn
%>
test页面输出

说明:
shape append relate的基本语法为:
shape {select ...} append ({select ...} RELATE ID TO PARAMETER 0,ID TO PARAMETER 1)

3、总结
ADO是.NET操作数据库的一种技术,和java中常用的jdbc类似。不过现在除了一些比较老的系统还在用.NET技术,IIS搭建网站以外,基本比较少见了。.NET正在逐渐慢慢地开始被其他技术取代了。从我日常工作的感觉确实vb不如java,python,c++这类的语言方便,没有那么多的开源库支持,网上能找到的资料也很有限。
4、参考资料
ADO中的多层次数据集,类似于dataset_weixin_30808575的博客-CSDN博客
shape {select ...} append ({select ...} RELATE ID TO PARAMETER 0,ID TO PARAMETER 1)的更多相关文章
- select * from (select P.*,ROWNUM RN FROM(select * from Mp_Relatedart where pubbaseid=785 order by ID ASC )P)M WHERE M.RN>2 and M.RN <= 7
select * from (select P.*,ROWNUM RN FROM(select * from Mp_Relatedart where pubbaseid=785 order by ID ...
- 数据库(update tab1 set tab1.name=tab1.name+(select t2.name from tab2 t2 where t2.id=tab1.id))
有t1 和 t2 两个表,表中的数据和字段如下: 执行 如下SQL语句: update tab1 set tab1.name=tab1.name+(select t2.name from tab2 t ...
- insert into select 与select into from -- sql 批量插入
参考资料:http://www.w3school.com.cn/sql/sql_union.asp UNION:操作符用于合并两个或多个select语句的结果集. ...
- sql: sybase与oracle中insert into select和select into的用法
1. sybase与oracle中insert into select和select into的用法 http://wjlvivid.iteye.com/blog/1921679 Sybase 一.首 ...
- select * 和 select 所有字段的区别
阅读本文大概需要 1 分钟. 之前发过的文章中,关于 select * 和 select 所有字段的知识,有描述不恰当,这次重新纠正下,加深下理解. MySQL 5.1.37 表记录数 41,547, ...
- Insert Into select 与 Select Into 哪个更快?
在平常数据库操作的时候,我们有时候会遇到表之间数据复制的情况,可能会用到INSERT INTO SELECT 或者 SELECT INTO : 那么二者语法上有什么区别?性能上又如何呢? 围绕着这两个 ...
- select * 比select column快很多奇怪案例分析
遇到MYSQL傻傻的地方,下面给个案例,大家感受下: 注意以下两个sql只有select *和select g.id区别. SQL1:SELECT g.idFROM table1 gINNER JOI ...
- oracle 中 insert select 和 select insert 配合使用
Insert Into select 与 Select Into 哪个更快? 在平常数据库操作的时候,我们有时候会遇到表之间数据复制的情况,可能会用到INSERT INTO SELECT 或者 SEL ...
- Python——IO多路复用之select模块select方法
Python——IO多路复用之select模块select方法 使用select模块的select方法实现Python——IO多路复用 实现同时将终端输入的文本以及客户端传输的文本写入文本文件中: w ...
- select * 和 select 字段的速度对比
拿WordPress的数据库做一个对比 SELECT ID,post_title, post_author FROM wp_posts ORDER BY ID LIMIT 100; OK, Time: ...
随机推荐
- POJ3417 Network暗的连锁 (树上差分)
树上的边差分,x++,y++,lca(x,y)-=2. m条边可以看做将树上的一部分边覆盖,就用差分,x=1,表示x与fa(x)之间的边被覆盖一次,m次处理后跑一遍dfs统计子树和,每个节点子树和va ...
- MatrixOne Linux 编译文档
MatrixOne Linux 编译文档 编译环境 硬件环境 操作系统 内存 CPU 磁盘 Windows环境下的Linux虚拟机 Linux version 3.10.0-1160.el7.x86_ ...
- vlunhub靶场之EMPIRE: LUPINONE
准备: 攻击机:虚拟机kali.本机win10. 靶机:EMPIRE: LUPINONE,网段地址我这里设置的桥接,所以与本机电脑在同一网段,下载地址:https://download.vulnhub ...
- 前端框架Vue------>第一天学习(2) v-if
API:https://cn.vuejs.org/v2/api/#key 文章目录 5.条件渲染 5.1 . v-if 5.2 . v-else-if 6 .列表渲染 7 .事件监听 5.条件渲染 5 ...
- NLP之基于词嵌入(WordVec)的嵌入矩阵生成并可视化
词嵌入 @ 目录 词嵌入 1.理论 1.1 为什么使用词嵌入? 1.2 词嵌入的类比推理 1.3 学习词嵌入 1.4 Word2Vec & Skip-Gram(跳字模型) 1.5 分级& ...
- Codeforces Round #553 (Div. 2)/codeforces1151
CodeForces1151 Maxim and Biology 解析: 题目大意 每次可以使原串中的一个字符\(+1/-1\),\(Z + 1\to A, A -1\to Z\),求至少修改多少次可 ...
- antd 批量上传文件逻辑
基本步骤 通过 antd 框架的 Upload 控件,采用手动上传的方式,先选择需要上传的文件(控制文件数量以及大小),再根据所选的文件列表,循环上传,期间通过 Spin 控件提示上传中. 效果展示 ...
- ISCTF2022WP
ISCTF2022改名叫套CTF吧(bushi),博主菜鸡一个,套题太多,挑一些题写下wp,勿喷. MISC 可爱的emoji 下载下来是个加密压缩包,根据hint掩码爆破密码 得到密码:KEYI ...
- SpringBoot 03: 常用web组件 - - - 拦截器 + Servlet + 过滤器
常用web组件 拦截器 Servlet 过滤器 使用思想 创建自定义类 实现或者继承框架里的接口或类 将自定义类注册到框架中 使用自定义类 拦截器 说明 拦截器是SpringMVC中的一种对象,能拦截 ...
- 2022年Python顶级自动化特征工程框架⛵
作者:韩信子@ShowMeAI 机器学习实战系列:https://www.showmeai.tech/tutorials/41 本文地址:https://www.showmeai.tech/artic ...