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: ...
随机推荐
- vite vue3 规范化与Git Hooks
在 <JS 模块化>系列开篇中,曾提到前端技术的发展不断融入很多后端思想,形成前端的"四个现代化":工程化.模块化.规范化.流程化.在该系列文章中已详细介绍了模块化的发 ...
- Docker | redis安装及测试
此篇文章目的是熟悉一下redis的下载安装使用,为后面部署redis集群做准备. 下载安装 linux上,我在/download目录下,执行下载的命令 root@--- ~]# wget http:/ ...
- 后端框架的学习----mybatis框架(5、分页)
七.分页 简单使用 1.在要使用Log4j的类中,导入包import org.apache.log4j.Logger; 2.日志对象,参数为当前类的class static Logger logger ...
- SQL语句编写的练习(MySQL)
SQL语句编写的练习(MySQL) 一.建表 1.学生表(Student) 学号 | 姓名 | 性别 | 出生年月 | 所在班级 create table Student( sno varchar(2 ...
- [渲染层错误] [jsbridge] invoke remoteDebugInfo fail: too eayly.
1.问题描述 建立新的小程序项目时.控制台报错 [渲染层错误] [jsbridge] invoke remoteDebugInfo fail: too eayly. 2.解决方法 修改调试基础库的版本 ...
- go-zero docker-compose 搭建课件服务(三):编写courseware api服务
0.转载 go-zero docker-compose 搭建课件服务(三):编写courseware api服务 0.1源码地址 https://github.com/liuyuede123/go-z ...
- Educational Codeforces Round 137 (Rated for Div. 2) A-F
比赛链接 A 题解 知识点:数学. \(4\) 位密码,由两个不同的数码组成,一共有 \(C_4^2\) 种方案.从 \(10-n\) 个数字选两个,有 \(C_{10-n}^2\) 种方案.结果为 ...
- Go | 基本数据类型的相互转换
基本数据类型的相互转换 Go在不同类型的变量之间赋值时需要显示转换,不能自动转换 基本语法 表达式 T(v): 将值v转换成类型T T就是数据类型: int32, int64, float32... ...
- python批量依赖包操作
1.导出所有的python依赖 pip freeze > requirements.txt #requirements.txt 为自定名称,可以指定路径 2.自动安装所有依赖包 pip in ...
- SQL中事务以及全局变量的使用
事务的定义 简单的说,事务处理可以用来维护数据库的完整性,保证一批SQL语句要么全执行,要么全部不执行 事务的特性 原子性 一致性 持久性 隔离性 注:一元九个 事务的使用 sel ...