Преобразовать массив байтов в строковое значение в VBScript - PullRequest
0 голосов
/ 31 марта 2011

У меня есть logTable в моей базе данных для изменений в журнале someTable.

logTable имеет три столбца:

первый для имени столбца хранилища, значение которого было изменено;
второй для старого значения;
третий для нового значения.

Второйтретий столбец имеет тип данных sql_variant.

В моей программе я получаю данные из этой таблицы, а oldValue и newValue представляют собой массивы байтов.

Например:

строк в logTable:


columnName(nvarchar(50)) oldValue(sql_variant)  newValue(sql_variant)

compName    name1       name2
address  "address1"  "address2"
zip      123         134
phone      123456789   987654321

Но я получаю значения oldValue и newValue в байтовых массивах.

Как:


address "byte array"   "byte array"
zip     "byte array"   "byte array"
phone   "byte array"   "byte array"

вместо:


address  "address1" "address2"
zip     123         134
phone    123456789   987654321

Этот код, который я использую для получения данных из БД:


Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open connStr
Set rsData = Server.CreateObject("ADODB.Recordset")
Set objComm = Server.CreateObject("ADODB.Command")
Set objComm.ActiveConnection= Conn
objComm.CommandText="usp_Log_GetOperationDetails"
objComm.CommandType = adCmdStoredProc 
objComm.Parameters.Append objComm.CreateParameter("@CompanyId",adInteger,adParamInput)
objComm.Parameters("@CompanyId")=Request("CompanyId")
objComm.Parameters.Append objComm.CreateParameter("@tableName",adVarChar,adParamInput, 50)
objComm.Parameters("@tableName")=Request("tableName")
rsData.CursorLocation = adUseClient
rsData.CursorType = adOpenStatic
Set rsData.Source = objComm
rsData.Open

If NOT rsData.EOF AND NOT rsData.BOF then
   Do While NOT rsData.EOF
    rsDataOldValue = rsData("OldValue")
    rsDatanewValue = rsData("NewValue")
        rsData.MoveNext
   Loop
End If

rsData.Close
Set rsData = Nothing
Conn.Close
Set Conn = Nothing
Set objComm = Nothing

Как преобразовать байтовый массив в правильное строковое значение?

Спасибо

1 Ответ

1 голос
/ 31 марта 2011

Вы пробовали приведение в вашем SQL-запросе?

SELECT CAST(oldvalue AS varchar(100)) from logTable

Редактировать: если приведение не принесет пользы, вам нужно написать функцию, подобную этой, которая преобразует байты в строку по одному (примечание: я не проверял это, так как я нев настоящее время в Windows)

function ByteArrayToString(theArray)
    dim i, str

    if vartype(theArray) < 8192 then
           exit function
    end if
    for i=lbound(theArray) to ubound(theArray) 
       str = str & asc(theArray(i))
    next
    ByteArrayToString = str
end function 

Чтобы проверить это, попробуйте

MsgBox(ByteArrayToString(rsDataOldvalue))
...