2011-03-31 3 views
0

someTable의 로그 변경 사항에 대한 데이터베이스에 logTable이 있습니다.바이트 배열을 vbscript의 문자열 값으로 변환

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 

내가 DB에서 데이터를 가져 오기 위해 사용이 코드 :


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 

가 어떻게 문자열 값을 수정하는 바이트 배열을 변환 할 수 있습니까?

감사합니다.

+0

당신이'newValue'와'oldValue'를 얻기 위해 사용하는 코드를 표시 할 수 있습니다 시도 테스트하려면? 나는 당신이 얻고 자하는 것을 실제로 이해하지 못합니다. –

+0

VarType (rsDataOldValue)의 결과를 보여줄 수 있습니까? 배열 인 경우> 8192 – renick

답변

1

SQL 쿼리에서 캐스팅을 시도 했습니까? 캐스트 늘 다음 시간 (에 문자열 하나 바이트를 변환 이와 같은 함수를 작성해야 좋은 일을하는 경우 참고 :

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

편집 나는 현재에 아닙니다 나는 이것을 테스트하지 않았습니다 윈도우)

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)) 
+0

캐스팅은 float 유형이있는 큰 값을 반올림합니다. 예 : 20000.75. 20000.8을 반환합니다. 나는 20000.75가 필요해. CAST (oldvalue AS nvarchar (max))를 사용하지만 도움이되지 않습니다. – Vyacheslav

관련 문제