1、ADODB.RecordSet 結果集轉化為 JSON 字符串
Public Function RecordSetToJSON(rs As ADODB.Recordset) As String Dim i As Integer Dim JSONstr As String JSONstr = "" If Not (rs.EOF And rs.BOF) Then '序列化JSON串 rs.MoveFirst While Not rs.EOF '左邊界 JSONstr = JSONstr + "{" For i = 0 To rs.Fields.Count - 1 '判斷數據類型 Select Case rs.Fields(i).Type Case DataTypeEnum.dbCurrency '貨幣類型 JSONstr = JSONstr + """" + rs.Fields(i).Name + """:" + CStr(rs.Fields(i).Value) + "," Case DataTypeEnum.dbBigInt, DataTypeEnum.dbDecimal, DataTypeEnum.dbFloat, DataTypeEnum.dbInteger, DataTypeEnum.dbLong, DataTypeEnum.dbDouble, DataTypeEnum.dbNumeric, DataTypeEnum.dbSingle '數值類型 JSONstr = JSONstr + """" + rs.Fields(i).Name + """:" + CStr(rs.Fields(i).Value) + "," Case Else '文本類型 JSONstr = JSONstr + """" + rs.Fields(i).Name + """:""" + CStr(rs.Fields(i).Value) + """," End Select Next JSONstr = Left(JSONstr, Len(JSONstr) - 1) '右邊界 JSONstr = JSONstr + "}," rs.MoveNext Wend JSONstr = Left(JSONstr, Len(JSONstr) - 1) JSONstr = "[" + JSONstr + "]" RecordSetToJSON = JSONstr Else '返回空串 RecordSetToJSON = "" End If End Function
2、發送數據到接口地址
dataStr:JSON字符串,url:接口地址,ReqMode:請求方式
Public Function SendData(dataStr As String, url As String, Optional ReqMode = "POST") As String Dim postData As String 'JSON數據 postData = dataStr '--- post Dim HttpClient As Object Set HttpClient = CreateObject("Microsoft.XMLHTTP") HttpClient.Open ReqMode, url, False HttpClient.setRequestHeader "Content-Type", "application/json; charset=UTF-8" HttpClient.Send pvToByteArray(postData) Do While HttpClient.readyState <> 4 DoEvents Loop SendData = HttpClient.responseText End Function
3、配置方法
' 下面是兩個轉換函數 Public Function pvToByteArray(sText As String) As Byte() pvToByteArray = GB2312ToUTF8(sText) End Function Public Function GB2312ToUTF8(strIn As String, Optional ByVal ReturnValueType As VbVarType = vbString) As Variant Dim adoStream As Object Set adoStream = CreateObject("ADODB.Stream") adoStream.Charset = "utf-8" adoStream.Type = 2 'adTypeText adoStream.Open adoStream.WriteText strIn adoStream.Position = 0 adoStream.Type = 1 'adTypeBinary GB2312ToUTF8 = adoStream.Read() adoStream.Close If ReturnValueType = vbString Then GB2312ToUTF8 = Mid(GB2312ToUTF8, 1) End Function
4、使用方法
Public Sub Upload_DATA() Dim url As String Dim JSONstr As String Dim nResult As String Dim nSql As String Dim cn As New ADODB.Connection Dim rst As New ADODB.Recordset ' Dim rsm As New ADODB.Stream cn.ConnectionString = 連接參數 cn.CursorLocation = adUseClient cn.Open nSql = "select c1,c2,c3 from temp" rst.Open nSql, cn, adOpenKeyset, adLockReadOnly If rst.EOF = False Then ' rst.Save rsm, adPersistXML ' TextResponse.Text = rsm.ReadText '輸出XML格式數據 url = "http://***.***.com//api//***" JSONstr = RecordSetToJSON(rst) If Len(Trim$(JSONstr)) > 0 Then nResult = SendData(JSONstr, url) Else MsgBox "沒有需要上傳的數據!" End If 'TextResponse.Text = JSONstr 'txtback.Text = nResult Debug.Print nResult End If rst.Close cn.Close End Sub