2011-03-31 127 views
0

我的數據庫中有一個logTable用於someTable上的日誌更改。將字節數組轉換爲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 

此代碼,我用它來從數據庫獲取數據:


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'的代碼?我真的不明白你期望得到什麼以及你實際得到什麼 – 2011-03-31 12:45:31

+0

你能顯示VarType(rsDataOldValue)的結果嗎?如果它是一個數組,它應該是> 8192 – renick 2011-03-31 15:22:14

回答

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

轉換具有浮點類型的大值。例如:20000.75。它返回20000.8。我需要20000.75。我使用CAST(oldvalue AS nvarchar(max)),但沒有幫助。 – Vyacheslav 2011-03-31 13:33:24

相關問題