我正在创建一个名为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))