但是我现在放到异步函数中也不行,就是当一个请求没有完成的时候,另一个请求开始后就会报错,因为我调取的 API 是要批量推送数据到指定的数据库中.
这个应该和异步没有什么关系。API开发文档发上来看看
这种不需要异步,按顺序提交数据即可。另外2条sql都是查询的{出入库明细} ,没有{出入库主表},所有数据都在一个表里面?如果这样没有必要查2次
这个表有几个单据单号?是一个单据单号就发送一次吗,还是所有的单据单号都一起发送?
是一个单据单号发送一次,这个代码应该可以怎么调整呢
Dim dt As DataTable
Dim cmd As New SQLCommand
cmd.ConnectionName = "ERP系统"
cmd.CommandText = "Select distinct 单据单号 From {出入库明细} Where 状态 = 1 And 单据单号 is not null"
dt = cmd.ExecuteReader()
Dim i1 As Integer = 1
For Each dr1 As DataRow In dt.DataRows '获取来自数据库的表明细信息
Dim hc As New HttpClient(Vars("apiurl") & "/tplus/api/v2/productReceive/Create")
hc.Headers.Add("appKey", appKey)
hc.Headers.Add("appSecret", appSecret)
hc.Headers.Add("openToken", accessToken)
hc.Headers.Add("Content-Type", "application/json")
hc.ContentType = "application/json"
Dim jo As New JObject
Dim s As String = dr1("单据单号")
Dim dt1 As DataTable
cmd.CommandText = "Select * From {出入库明细} Where 单据单号= '" & s & "' And 状态 = 1"
dt1 = cmd.ExecuteReader()
Dim dr As DataRow = dt1.DataRows(0)
jo("dto") = New JObject
jo("dto")("ExternalCode") = s '外部系统数据编号,后台做唯一性检查
'jo("dto")("Code") = "单据编号 false"
jo("dto")("VoucherType") = New JObject
jo("dto")("VoucherType")("Code") = "ST1002"
jo("dto")("VoucherDate") = dr("单据日期").ToString
jo("dto")("BusiType") = New JObject
jo("dto")("Warehouse") = New JObject
jo("dto")("Warehouse")("Code") = dr("仓库编码").ToString
jo("dto")("BusiType")("Code") = dr("操作编码").ToString
jo("dto")("Warehouse")("Name") = dr("库位").ToString
jo("dto")("Clerk") = New JObject
jo("dto")("Clerk")("Code") = dr("制单人员").ToString
jo("dto")("Clerk")("Name") = dr("制单人员").ToString
'jo("dto")("Memo") = "表头备注"
'==========下面是明细信息
Dim jalist As New JArray
For i As Integer = 0 To dt1.DataRows.Count - 1 '获取来自数据库的表明细信息
dr = dt1.DataRows(i)
Dim jolist As New JObject
jolist("Code") = i '行号,从1开始自增长
jolist("Inventory") = New JObject '行号,从1开始自增长
jolist("Inventory")("code") = dr("存货编码").ToString
……自行补齐明细数据
jolist("Amount") = CInt(dr("成本金额"))
jalist.Add(jolist)
jo("dto")("RDRecordDetails") = jalist
Next
hc.Content = jo.tostring
Dim ret As String = hc.GetData()
If ret.Contains("error") Then
MsgBox(ret)
End If
Next