わかりましたので、何が間違っているかを見つけました。それは 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