' Retrieve data from a database.
Public Function GetData( _
ByVal connectionString As String, _
ByVal tableName As String, _
ByVal schema As String) _
As Microsoft.Web.Management.DatabaseManager.QueryResult _
Implements Microsoft.Web.Management.DatabaseManager.IDbTableDataManager.GetData
' Create a new query result object.
Dim queryResult As QueryResult = New QueryResult
' Create a connection to the database.
Dim connection As OleDbConnection = New OleDbConnection(connectionString)
' Open the database connection.
connection.Open()
Dim columns As List(Of Column) = New List(Of Column)
GetColumns(connection, tableName, schema, columns)
Dim metadata As IList(Of QueryColumnMetadata) = New List(Of QueryColumnMetadata)
For Each c As Column In columns
Dim m As QueryColumnMetadata = New QueryColumnMetadata
m.Name = c.Name
m.ColumnWidth = c.Length
m.IsNullable = c.AllowNulls
m.TypeInfo = c.TypeInfo
metadata.Add(m)
Next
Dim fields As StringBuilder = New StringBuilder
If (metadata.Count = 0) Then
' When the table is not found, adding an asterix returns an error message.
fields.Append("*")
Else
Dim fieldCount As Integer = metadata.Count
Dim isFirst As Boolean = True
Dim i As Integer = 0
For i = 0 To (fieldCount - 1)
Dim m As QueryColumnMetadata = metadata(i)
If (isFirst = False) Then
fields.Append(",")
End If
isFirst = False
fields.Append(EscapeName(m.Name))
queryResult.ColumnMetadata.Add(m)
Next
End If
' Create a new query object.
Dim query As Query = New Query
' Create a SQL query statement.
query.Statement = "SELECT " + fields.ToString + " FROM " + EscapeName(tableName)
' retrieve the query results.
Dim results() As QueryResult = ExecuteQuery(connectionString, query)
' Add the query results to the list.
queryResult.QueryResults.AddRange(results(0).QueryResults)
' Return the query result.
Return queryResult
End Function
...
Friend Shared Function EscapeName(ByVal name As String) As String
' Test if the value is already escaped.
If (name.StartsWith("[", StringComparison.Ordinal) AndAlso name.EndsWith("]", StringComparison.Ordinal)) Then
' Return the string with no changes.
Return name
End If
' Create a new string builder for the escaped string.
Dim escapedName As StringBuilder = New StringBuilder
' Prepend the string with an opening bracket.
escapedName.Append(Microsoft.VisualBasic.ChrW(91))
' Loop through the string.
Dim i As Integer = 0
Do While (i < name.Length)
Dim c As Char = name(i)
If (c = Microsoft.VisualBasic.ChrW(93)) Then
escapedName.Append(Microsoft.VisualBasic.ChrW(93))
End If
escapedName.Append(c)
i = (i + 1)
Loop
' Append the string with an opening bracket.
escapedName.Append(Microsoft.VisualBasic.ChrW(93))
' Return the escaped string.
Return escapedName.ToString
End Function