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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie verwenden
GetString()
Methode auf spezifische unicode -Text.Encoding
zu konvertieren zurück zu einem string. Besetzung der Spaltebyte[]
aus dem reader und dann konvertieren, dass zu einem string mitGetString()
.