我想这可能是一个愚蠢的问题,但我似乎无法从此函数返回的字符串中删除某种空间。我想第一个真正的问题是为什么当我们像这样“1234789”保存到数据库时,这个函数返回一个像这样的字符串“1 2 3 4 5 6 7 8 9”。第二个问题是为什么这样的事情
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
答案 0 :(得分:0)
谢谢大家的帮助,这是修复。 所以,问题出在我将加密字段转换为的类型中。我使用的是varchar而不是nvarchar。
SELECT convert(varchar(30),decryptbykey(keyname) FROM paymentacct
到
SELECT convert(nvarchar(30),decryptbykey(keyname)) FROM paymentacct
注意varchar - >转换函数中的nvarchar更改
答案 1 :(得分:-1)
试试Regex \
System.Diagnostics.Debug.WriteLine(Regex.Replace("12 3 4 5 ",@"\s+",""));
如果您正在使用String.Replace,则它不会将“\ p {Zs}”识别为空格。
您需要使用正则表达式。这个问题没有标记为Regex。
你在数据库中说它是正确的值吗?