shape {select ...} append ({select ...} RELATE ID TO PARAMETER 0,ID TO PARAMETER 1)
2024-09-07 11:56:01
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博客
最新文章
- HTML 内容居中方式总结
- arm 2440 linux 应用程序 nes 红白机模拟器 第4篇 linux 手柄驱动支持
- SSH无密码登陆Agent admitted failure to sign using the key
- [转载]Linux下tomcat的catalina.out文件过大,以及目录更改解决办法
- 第2章 使用JavaScript
- node操作mysql数据库
- Xcode常用快捷键及代码格式刷(缩进)方法-b
- 【暑假】[实用数据结构]UVAlive 3027 Corporative Network
- centos 6.4 安装php-fpm 及常用扩展,(转)
- [置顶] WebService调用工具(AXIS2)
- 什么是PWM信号
- Echarts数据可视化series-map地图,开发全解+完美注释
- python网络编程基础(一)
- laravel(lumen)配置读写分离后,强制读主(写)库数据库,解决主从延迟问题
- bs4.FeatureNotFound: Couldn’t find a tree builder with the features you requested: lxml.
- Instrumentation 功能介绍(javaagent)
- MIT 6.824 lab1:mapreduce
- u-boot2016.05 有关 4096page size , oob == 224 nand 的移植支持
- stm32内部温度计算方法
- servlet转发与重定向区别
热门文章
- 使用docker-compose安装Prometheus
- 使用FreeMarker配置动态模板
- 2022.2.26A组总结&;反思
- 4.pytest结合allure-pytest插件生成allure测试报告
- 手把手教你使用LabVIEW实现Mask R-CNN图像实例分割
- 介绍一个jmeter录制脚本谷歌插件 —— metersphere-chrome-plugin
- LoadRunner11脚本关联+运行负载+分析结果
- SpringBoot3正式版将于11月24日发布:都有哪些新特性?
- 思维分析逻辑 3 DAY
- Go语言核心36讲24