如何从hierarchyid列中获取字符串表示形式?

时间:2017-04-19 14:48:14

标签: sql-server vb.net

我正在创建一个名为dbfiddle的工具,而我在将一些SQL数据类型显示为可读文本方面遇到了麻烦。其中一个特别是hierarchyid

我在数据库后端使用JSON API,而SQL Server 2014/2016使用System.Web.Script.Serialization.JavaScriptSerializer将结果转换为JSON。

对于decimal这适用:

result.data(i).Add(If(reader.IsDBNull(i),Nothing,reader.GetSqlDecimal(i).ToString()))

对于varbinary,这很好:

result.data(i).Add(If(reader.IsDBNull(i),Nothing,"0x" & (New System.Runtime.Remoting.Metadata.W3cXsd2001.SoapHexBinary(reader(i))).ToString()))

对于大多数其他数据类型,可以使用简单的ToString

result.data(i).Add(If(reader.IsDBNull(i),Nothing,reader(i).ToString()))

但我无法弄清楚hierarchyid的等效代码应该是什么。如何转换为字符串?我无法以任何方式改变查询,因为dbfiddle不解析输入SQL。

以下是我的代码相关部分的简化版本:

Dim sr = New StreamReader(Request.InputStream)
Dim ser = New System.Web.Script.Serialization.JavaScriptSerializer()
ser.MaxJsonLength = Int32.MaxValue
Dim queries = ser.Deserialize(Of List(Of String))(sr.ReadToEnd())
sr.Close()
Dim query = queries(0)

Dim connection As SqlConnection
Dim command As SqlCommand

…

command = connection.CreateCommand
command.CommandText = query

Dim reader = command.ExecuteReader()
Dim result = New List(Of List(Of Object))

For i As Integer = 0 To reader.FieldCount-1
    result.Add(New List(Of Object))
Next

While reader.Read()
    For i As Integer = 0 To reader.FieldCount-1
        result(i).Add(reader(i).ToString())
    Next
End While

reader.Close()
connection.Close()
…
Response.Write(ser.Serialize(result))

0 个答案:

没有答案