SQL Konvertieren von unicode-kodierten varbinary string

Ok, ich habe den export REG_BINARY-Werte und speichern diese in SQL und später muss ich konvertieren Sie diese Werte zu einem string..

Was ich habe:

in c# ich Las den REG_BINARY in ein Byte[] Daten geben wie:

RegistryKey rk = Registry.CurrentUser.OpenSubKey...

byte[] value = rk.GetValue("Dieschlüssel")

dann habe ich speichern Sie es auf einer SQL-VarBinary-Feld verwenden:

        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();
        }
    }

wenn ich lese das der gespeicherte Wert im SQL Management Studio, Verwendung:

select oldregbinary from InvPstFile where PersonalFolderId = 73 

bekomme ich:

0x0000000038A1BB1005E5101AA1BB08002b2a56c200006d737073742e646c6c00000000004e495441f9bfb80100aa0037d96e0000000043003a005c00550073006500720073005c00630068007200690073007400690061006e002e006d007500670067006c0069005c0044006f00630075006d0065006e00740073005c004f00750074006c006f006f006b002000460069006c00650073005c006f006e0065006d006f0072006500730061006d0070006c0065002e007000730074000000

Wenn ich versuche zu casten einen string mit CAST(AboveString als VARCHAR(max)) bekomme ich kein Ergebnis (angezeigt). Der Grund ist, der die unicode-Kodierung. Wenn ich ersetzen/entfernen, alle 00 ich:

0x38A1BB15E5101AA1BB082B2A56C26D737073742e646c6c4e495441f9bfb801aa37d96e433a5c55736572735c63687269737469616e2e6d7567676c695c446f63756d656e74735c4f75746c6f6f6b2046696c65735c6f6e656d6f726573616d706c652e707374

wenn ich die Besetzung, Wert VARCHAR(MAX) bekomme ich:
8¡»å¡»+*VÂmspst.dllNITAù¿ª7ÙnC:\Users\MYREMOVEPROFILENAME\Dokumente\Outlook-Dateien\onemoresample.pst

also, irgendwelche Ideen, wie zu konvertieren/wandeln Sie die unicode-kodierten Wert zu einem string?

(ich weiß, Sie können decodieren oben genannten Zeichenfolge zu finden, die ersetzt MYREMOVEPROFILENAME - es ist nicht der Mühe Wert ;))

  • Haben Sie versucht, casting, um nvarchar(MAX)?
  • yep, Gleiches Ergebnis => nichts. auch ich wählte "Ergebnis-text" im SSMS
  • seltsam - dieser Mann zu haben scheint, begegnet ein ähnliches Problem.
Schreibe einen Kommentar