Попробуйте это для конкатенации строк:
BinPassword = BinPassword & ChrB(AsciiCode)
+
не является правильным оператором конкатенации строк, и использование ChrB
должно убедить VB и ADO, что вы действительно передаете ему двоичные данные, а не символьные данные.
Есть также шанс, что ДОК будет прав насчет размера. Вы можете попробовать установить размер, который, как вы уверены, длиннее, чем вам нужно, или вы можете вообще обойтись без установки размера, разделив операцию на два оператора:
cmd.Parameters.Append cmd.CreateParameter("ShaPassword", adBinary, adParamInput)
cmd.Parameters("ShaPassword").Value = BinPassword
Это странно, но это работало на меня в прошлом.
Просто для дополнительного акцента на случай, если кто-то увидит это снова: свойство size
в Parameter
объектах не обязательно должно соответствовать точной длине в байтах вашего аргумента; он просто должен быть по крайней мере достаточно большим, чтобы вместить ваш аргумент.