代码之家  ›  专栏  ›  技术社区  ›  Aheho

在VB6中填充ADODB命令二进制参数

  •  0
  • Aheho  · 技术社区  · 16 年前

    我需要修改别人的VB代码,而我对VB6没有太多经验。 我需要使用ADODB调用SQL2000存储过程。其中一个参数是二进制类型的,这给了我一些问题。每次创建参数时,都会出现一个错误“应用程序为当前操作使用了错误类型的值”。错误发生在cmd.parameter.append行,它甚至没有给我机会调用cmd.execute。

    Dim HexPassword As String
    Dim BinPassword As String
    Dim AsciiCode As Integer
    Dim unitDigit As String
    Dim TensDigit As String
    
    Set obj_hash = New EDCrypt
    
    ' Returns Hash of password hex encoded
    HexPassword = obj_hash.GetTextHash(Trim(txtPassword.text), haSHA1)
    
    ' Converts Hex Encoded string to Binary encoded string
    Dim i As Integer
    
    
    For i = 1 To 40 Step 2
        unitDigit = Mid(HexPassword, i + 1, 1)
        TensDigit = Mid(HexPassword, i, 1)
        AsciiCode = HexStrtoInt(TensDigit + unitDigit)
        BinPassword = BinPassword + Chr(AsciiCode)
    Next i
    
    conn.Open ConnectionString
    Dim cmd As ADODB.Command
    Set cmd = New ADODB.Command
    Set cmd.ActiveConnection = conn
    cmd.CommandType = adCmdStoredProc
    
    cmd.CommandText = "ValidatePasswordNew"
    cmd.Parameters.Append cmd.CreateParameter("LoginID", adVarChar, adParamInput, 30, UserID)
    cmd.Parameters.Append cmd.CreateParameter("ShaPassword", adBinary, adParamInput, 20, BinPassword)
    
    3 回复  |  直到 16 年前
        1
  •  1
  •   Dan    16 年前

    为字符串连接尝试以下操作:

    BinPassword = BinPassword & ChrB(AsciiCode)
    

    + 不是正确的字符串连接运算符,并且使用 ChrB

    cmd.Parameters.Append cmd.CreateParameter("ShaPassword", adBinary, adParamInput)
    cmd.Parameters("ShaPassword").Value = BinPassword
    

    这很奇怪,但在过去对我很有效。

    size 财产 Parameter 对象不必与参数的确切字节长度匹配;这只是必须的 大到足以支撑你的论点。

        2
  •  1
  •   DOK    16 年前

    我认为问题可能在于设置size=20。这可能是一个可选参数。试着把它删掉。这里可能需要使用不同的CreateParameter重载。

    MSDN page 这就形成了一种普遍的模式:

    command.CreateParameter (Name, Type, Direction, Size, Value)
    

        3
  •  1
  •   Bob77    16 年前

    你可能需要广告。很可能您应该将字节数组作为值传递。