0

わかりましたので、何が間違っているかを見つけました。それは sql convert 関数にありました。nvarchar(30) であるはずだったときに、varchar(30) に変換していました。違いを見るために。varchar と nvarchar の違いは何ですか?

これはばかげた質問かもしれませんが、この関数によって返される文字列からある種のスペースを削除できないようです。最初の本当の疑問は、この "1234789" のようにデータベースに保存しているときに、この関数が "1 2 3 4 5 6 7 8 9" のような文字列を返す理由だと思います。2番目の質問は、なぜこのような

Replace("1 2 3 4 5 6 7 8 9","\p{Zs}","")

また

Replace("1 2 3 4 5 6 7 8 9"," ","")

機能していません。間の文字がスペースのように見えますが、そうではないためだと感じています。

私の腕時計

    Private Shared Function GetEncryptedPmtField(lhID As Integer, accountId As Integer, fieldName As String)
        Dim openKeyCmd = String.Format("OPEN SYMMETRIC KEY somekey DECRYPTION BY PASSWORD = '{0}'",     ConfigurationManager.AppSettings("Somethingsomething"))
        Const closeKeyCmd As String = "CLOSE SYMMETRIC KEY somekey"

        Dim command As New SqlCommand()
        command.Connection = New SqlConnection(ConfigurationManager.ConnectionStrings("Something").ConnectionString)
        command.CommandType = CommandType.Text
        command.CommandText = String.Format("{0} SELECT convert(varchar(30),decryptbykey({1})  FROM  paymentacct WHERE lh_id = @lhid AND id = @id ; {2}", openKeyCmd, fieldName, closeKeyCmd)
        command.Parameters.AddRange({New SqlParameter With {.ParameterName = "lhid", .Value = lhID}, New SqlParameter With {.ParameterName = "id", .Value = accountId}})
        command.Connection.Open()
        Dim baNum = command.ExecuteScalar().ToString()
        command.Connection.Close()
        Return baNum
    End Function
4

2 に答える 2

0

助けてくれてありがとう、ここに修正があります。したがって、問題は暗号化されたフィールドを変換するタイプにありました。nvarchar の代わりに varchar を使用していました。

  SELECT convert(varchar(30),decryptbykey(keyname) FROM  paymentacct

 SELECT convert(nvarchar(30),decryptbykey(keyname))  FROM  paymentacct

convert 関数の varchar -> nvarchar の変更に注意してください。

于 2012-09-06T17:35:05.677 に答える
-1

正規表現を試す

System.Diagnostics.Debug.WriteLine(Regex.Replace("12 3  4   5   ",@"\s+",""));

String.Replace を使用している場合、"\p{Zs}" をスペースとして認識しません。
正規表現を使用する必要があります。質問に正規表現のタグが付けられていません。

データベースで正しい値だと言っていますか?

于 2012-09-06T17:00:04.607 に答える