函数返回每个字符之间带有空格的字符串,在尝试删除空格时出现问题

时间:2012-09-06 16:39:26

标签: .net sql vb.net

好的,所以我发现了什么问题,它是在sql转换函数中。当它被认为是nvarchar(30)时,我正在转换为varchar(30)。看到差异。 What is the difference between varchar and 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"," ","")

不工作,我有一种感觉,因为中间的人物看起来像空格但不是。

My Watch

    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

2 个答案:

答案 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。

你在数据库中说它是正确的值吗?