• VB6 查询结果集 ADODB.RecordSet 转JSON, 并请求接口上传数据


    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
  • 相关阅读:
    Java加密作业
    作业
    思考动手
    方法作业
    课堂2数字输出
    字符型转整形
    课堂验证作业
    Eclipse @override报错解决
    用注解配置动态代理
    动态代理模式
  • 原文地址:https://www.cnblogs.com/wx881208/p/13334080.html
Copyright © 2020-2023  润新知