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博客

参数化命令的操作 | Microsoft Docs

ADO 教程 | 菜鸟教程 (runoob.com)

最新文章

  1. HTML 内容居中方式总结
  2. arm 2440 linux 应用程序 nes 红白机模拟器 第4篇 linux 手柄驱动支持
  3. SSH无密码登陆Agent admitted failure to sign using the key
  4. [转载]Linux下tomcat的catalina.out文件过大,以及目录更改解决办法
  5. 第2章 使用JavaScript
  6. node操作mysql数据库
  7. Xcode常用快捷键及代码格式刷(缩进)方法-b
  8. 【暑假】[实用数据结构]UVAlive 3027 Corporative Network
  9. centos 6.4 安装php-fpm 及常用扩展,(转)
  10. [置顶] WebService调用工具(AXIS2)
  11. 什么是PWM信号
  12. Echarts数据可视化series-map地图,开发全解+完美注释
  13. python网络编程基础(一)
  14. laravel(lumen)配置读写分离后,强制读主(写)库数据库,解决主从延迟问题
  15. bs4.FeatureNotFound: Couldn’t find a tree builder with the features you requested: lxml.
  16. Instrumentation 功能介绍(javaagent)
  17. MIT 6.824 lab1:mapreduce
  18. u-boot2016.05 有关 4096page size , oob == 224 nand 的移植支持
  19. stm32内部温度计算方法
  20. servlet转发与重定向区别

热门文章

  1. 使用docker-compose安装Prometheus
  2. 使用FreeMarker配置动态模板
  3. 2022.2.26A组总结&amp;反思
  4. 4.pytest结合allure-pytest插件生成allure测试报告
  5. 手把手教你使用LabVIEW实现Mask R-CNN图像实例分割
  6. 介绍一个jmeter录制脚本谷歌插件 —— metersphere-chrome-plugin
  7. LoadRunner11脚本关联+运行负载+分析结果
  8. SpringBoot3正式版将于11月24日发布:都有哪些新特性?
  9. 思维分析逻辑 3 DAY
  10. Go语言核心36讲24