9

Zasadniczo próbuję podać użytkownikowi określone hasło, aby móc przetestować niektóre funkcje w systemie, ponieważ mam tylko konto administratora i nie mogę się z tym bawić, że właśnie wybieram konto losowe, więc mogę zrobić testowanie. Więc tutaj jest moja próba aktualizacji:Jak zaktualizować zmienne pole o określonej wartości?

UPDATE dbo.Login 
SET 
    Salt=CAST('bPftidzyAQik' AS VARBINARY), 
    Password=CAST('0x2B89C2954E18E15759545A421D243E251784FA009E46F7A163926247FDB945F85F095DBB1FFF5B2B43A6ADAE27B8C46E176902412C4F8943E39528FF94E0DD5B' AS VARBINARY) 
WHERE LoginID=10947 

działa poprawnie jednak kod w bazie wygląda japoński dla jednej i dla drugiej składnia wygląda w porządku, ale to nie jest wartość Kładę się, chcę aby użyć dokładnej wartości, którą umieściłem, aby móc się zalogować. Jak to zrobić? Wypróbowałem kilka różnych rozwiązań do przesyłania i konwersji bez powodzenia.

+0

Wait - dlaczego jest to oznaczone zarówno z MySQL i SQL Server? Który to jest? –

+0

Przeprosiny Naprawiłem tagi teraz – shicky

Odpowiedz

25

Spróbuj tego:

UPDATE dbo.Login 
SET 
    Salt=CAST('bPftidzyAQik' AS VARBINARY), 
    Password=0x2B89C2954E18E15759545A421D243E251784FA009E46F7A163926247FDB945F85F095DBB1FFF5B2B43A6ADAE27B8C46E176902412C4F8943E39528FF94E0DD5B 
WHERE LoginID=10947 

(nie trzeba rzucać ciąg przechowywania wartości hex do varbinary - to jest właśnie to, co jest domyślnie, bez cudzysłowów)

Pytanie brzmi , w jaki sposób generujesz tę wartość szesnastkową hasła i czy używasz tego samego kodowania, aby wygenerować ją tak, jak ją czytasz? Jeśli planujesz przekonwertować dane z powrotem na ciąg znaków, potrzebujesz do tego kodu. Oto funkcja pisałem, że robi to:

CREATE FUNCTION ConvertBinary 
( 
    @value AS varbinary(max) 
) RETURNS VARCHAR(MAX) AS BEGIN 

    DECLARE @result AS varbinary(max), 
      @result2 AS varchar(max), 
      @idx AS bigint; 

    IF @value IS null 
     return null; 

    SELECT @result = @value; 
    SELECT @result2 = ''; 
    SELECT @idx = 1; 

    WHILE substring(@result, @idx, 1) != 0 AND @idx < len(@result) 
     BEGIN 
      SET @result2 = @result2 + cast(substring(@result,@idx,1) as char(1)); 
      SET @idx = @idx + 1; 
     END 

    RETURN @result2; 

END 

Nie wiem, jak pomocne będzie to dla ciebie, choć, ponieważ jest to bardzo możliwe, że cokolwiek aplikacja korzysta z tych pól jest obsługa wartości inaczej niż tej funkcji oczekuje. W przypadku tej funkcji funkcja przyjmuje wartość varbinary, która pierwotnie była ciągiem utf-8, i zwraca wartość varchar tego łańcucha. Powodzenia!

+0

Dziękuję jake, który robił moją głowę! Wszystko już rozwiązane, dosłownie wystarczy, aby usunąć cytaty z hasła :( – shicky

2

Ponieważ używasz 2008, spróbuj tego:

UPDATE dbo.Login 
SET 
    Salt=CAST('bPftidzyAQik' AS VARBINARY), 
    Password=CONVERT(VARBINARY(MAX), '0x2B89C2954E18E15759545A421D243E251784FA009E46F7A163926247FDB945F85F095DBB1FFF5B2B43A6ADAE27B8C46E176902412C4F8943E39528FF94E0DD5B', 1) 
WHERE LoginID=10947 

(http://blogs.msdn.com/b/sqltips/archive/2008/07/02/converting-from-hex-string-to-varbinary-and-vice-versa.aspx)

+0

Niestety, wciąż ten sam ciąg jest zmieniony, więc nie otrzymuję znanego hasła w tym polu. – shicky

Powiązane problemy