2011-03-31 73 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

相关问题