好吧,我有出口REG_BINARY值,並將其存儲在SQL後來我需要將這些值轉換爲字符串..SQL Unicode轉換編碼VARBINARY字符串
我有什麼:
在C#我讀REG_BINARY到字節]的數據類型,如:
的RegistryKey RK = Registry.CurrentUser.OpenSubKey ...
字節[]值= rk.GetValue( 「TheKey」)
private void SqlStorePstFileInfo(List<PersonalFolderObject> listOfPstObjects, int? userComputerId)
{
using (var sqlConnection = new SqlConnection(GetConnectionString()))
{
sqlConnection.Open();
foreach (PersonalFolderObject pfo in listOfPstObjects)
{
string s = "INSERT INTO [InvPstFile] (UserComputerId, Name, Path, Size, OldRegBinary) VALUES(@UserComputerId, @Name, @Path, @Size, @OldRegBinary)";
using (SqlCommand sqlCmd = new SqlCommand(s, sqlConnection))
{
SqlParameter pUserComputerId = sqlCmd.Parameters.Add("@UserComputerId", SqlDbType.Int);
pUserComputerId.Value = userComputerId;
SqlParameter pName = sqlCmd.Parameters.Add("@Name", SqlDbType.NVarChar);
pName.Value = pfo.Name;
SqlParameter pPath = sqlCmd.Parameters.Add("@Path", SqlDbType.NVarChar);
pPath.Value = pfo.OldPath;
SqlParameter pSize = sqlCmd.Parameters.Add("@Size", SqlDbType.Int);
pSize.Value = pfo.Size;
SqlParameter pOldRegBinary = sqlCmd.Parameters.Add("@OldRegBinary", SqlDbType.VarBinary);
pOldRegBinary.Value = pfo.OldRegBinary;
sqlCmd.ExecuteNonQuery();
}
//string s = string.Format("INSERT INTO [InvPstFile] (UserComputerId, Name, Path, Size) " +
// "VALUES ('{0}','{1}','{2}','{3}')",
// userComputerId, pfo.Name, pfo.OldPath, pfo.Size);
//Helpers.Logging.Log.Info(string.Format("SQL: {0}", s));
//var sqlCmd = new SqlCommand(s, sqlConnection);
//sqlCmd.ExecuteNonQuery();
}
sqlConnection.Close();
}
}
當我使用讀取SQL Management Studio中存儲的值:
select oldregbinary from InvPstFile where PersonalFolderId = 73
我得到:然後我用它存儲到一個SQL VARBINARY場
0x0000000038A1BB1005E5101AA1BB08002B2A56C200006D737073742E646C6C00000000004E495441F9BFB80100AA0037D96E0000000043003A005C00550073006500720073005C00630068007200690073007400690061006E002E006D007500670067006C0069005C0044006F00630075006D0065006E00740073005C004F00750074006C006F006F006B002000460069006C00650073005C006F00 6E0065006D006F0072006500730061006D0070006C0065002E007000730074000000
當我嘗試使用CAST(AboveString as VARCHAR(max))將其轉換爲字符串時,我得不到任何結果(顯示)。原因是unicode編碼。當我更換/刪除所有00我得到:
0x38A1BB15E5101AA1BB082B2A56C26D737073742E646C6C4E495441F9BFB801AA37D96E433A5C55736572735C63687269737469616E2E6D7567676C695C446F63756D656E74735C4F75746C6F6F6B2046696C65735C6F6E656D6F726573616D706C652E707374
當我投該值VARCHAR(MAX),我得到: 8¡»å¡»+ *VÂmspst.dllNITAù¿¸ª7ÙnC:\用戶\ MYREMOVEPROFILENAME \ Documents \ Outlook Files \ onemoresample.pst
那麼,任何想法如何轉換/將Unicode編碼值轉換爲字符串?
(我知道你可以解碼上面的字符串,找到替代MYREMOVEPROFILENAME - 這是不值得的努力;))
您是否嘗試過鑄造'爲nvarchar(MAX)'? –
是的,同樣的結果=>什麼也沒有。即使我在SSMS –
中選擇了'result to text'奇怪 - [這個人](http://dba.fyicenter.com/faq/sql_server/Converting_Binary_Strings_into_Unicode_Characters.html)似乎也遇到過類似的問題。 –