Facebook の FQL クエリ メソッドと同様の方法で、データベースから必要なものを JSON テキスト結果として出力できる関数を作成しました。
同じ関数を使用して出力をディクショナリとして取得したり、(Dictionary) のリストを他の目的で VB 関数と共に使用したりすることもできます。
Public Shared Function getDataList(sql As String, output As String, useDb As String, labelName As String, fileName As String)
Dim dataDetail
'' This function will return the content of a query as either a key/value dictionary, or a key(key/value) result for formating
'' as JSON for JS handling or a Dictionary to use with server side codes
If labelName <> "" Then
dataDetail = New List(Of Generic.Dictionary(Of String, String))
Else
dataDetail = New Generic.Dictionary(Of String, Generic.Dictionary(Of String, String))
End If
Dim connection As OdbcConnection = Common.getConnection(useDb)
Try
connection.Open()
Dim connect As OdbcCommand = Common.createCommand(sql, connection, useDb)
Dim getData As New DataTable()
getData.Load(connect.ExecuteReader(CommandBehavior.CloseConnection))
For Each row In getData.Rows
Dim rowDetail As New Generic.Dictionary(Of String, String)
For Each column In getData.Columns
Dim theData = row(column)
If IsDBNull(theData) Then
theData = ""
End If
If LCase(output) = "json" Then
theData = HttpContext.Current.Server.HtmlDecode(theData)
End If
rowDetail.Add(column.ToString, theData)
Next
Next
connection.Close()
Catch theError As Exception
HttpContext.Current.Response.Write(theError)
Finally
connection.Dispose()
End Try
If output = "json" Then
Dim serializer As New JavaScriptSerializer
HttpContext.Current.Response.Write(serializer.Serialize(dataDetail))
ElseIf output = "dictionary" Then
Return dataDetail
End If
End Function
これは問題なく動作し、データベースからデータをすばやく取得するのに非常に便利であることがわかりました。
私が抱えている唯一の問題は、出力を JSON ファイルとして取得するときに、エンコードされた HTML としてデータベースに保存されているものをすべて変換して、ブラウザーに適切に表示することです。
この線
theData = HttpContext.Current.Server.HtmlDecode(theData)
これを行うことを意図しており、そうしています...ちょっと...しかし、今日はこのキャラクター:
'
デコードしていません。
何か案は?!