好的,所以我发现了问题所在,它在 sql 转换函数中。当它应该是 nvarchar(30) 时,我正在转换为 varchar(30)。来看看区别。varchar 和 nvarchar 有什么区别?
我想这可能是一个愚蠢的问题,但我似乎无法从这个函数返回的字符串中删除某种空间。我想第一个真正的问题是为什么当我们像这样“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