クエリ結果内の列のメタデータを表します。
継承階層
System.Object
Microsoft.Web.Management.DatabaseManager.QueryColumnMetadata
名前空間:Microsoft.Web.Management.DatabaseManager
アセンブリ: Microsoft.Web.Management.DatabaseManager (Microsoft.Web.Management.DatabaseManager.dll内)
構文
'Declaration
Public Class QueryColumnMetadata
'Usage
Dim instance As QueryColumnMetadata
public class QueryColumnMetadata
public ref class QueryColumnMetadata
public class QueryColumnMetadata
QueryColumnMetadata 型は、次のメンバーを公開します。
コンストラクター
| メソッドの型 | 名前 | 説明 |
|---|---|---|
|
QueryColumnMetadata の | QueryColumnMetadata クラスの新しいインスタンスを作成します。 |
特性
| プロパティの種類 | 名前 | 説明 |
|---|---|---|
|
ColumnWidth | クエリ結果内の列メタデータの列幅を取得または設定します。 |
|
IsComputed | クエリ結果内で列データが計算されるかどうかを示す値を取得または設定します。 |
|
IsNullable | クエリ結果内で列データが nulla null 参照 (Visual Basic では Nothing) をサポートするかどうかを示す値を取得または設定します。 |
|
名前 | クエリ結果内の列メタデータの列名を取得または設定します。 |
|
Tag | QueryColumnMetadata クラスに格納されているジェネリック オブジェクトを返します。 |
|
TypeInfo の | クエリ列のメタデータの型情報を取得します。 |
メソッド
| メソッドの型 | 名前 | 説明 |
|---|---|---|
|
Equals | (オブジェクトから継承されます。 |
|
Finalize | (オブジェクトから継承されます。 |
|
GetHashCode を する | (オブジェクトから継承されます。 |
|
GetType を する | (オブジェクトから継承されます。 |
|
MemberwiseClone | (オブジェクトから継承されます。 |
|
に ToString を適用する | (オブジェクトから継承されます。 |
注釈
データベース プロバイダーが GetData メソッドを使用してテーブル データを取得する場合、データベース マネージャーが情報を照会する前に、プロバイダーがテーブルのデータの列メタデータを指定する必要があります。
例示
次のコード サンプルでは、OLEDB データ ソースからデータベース テーブル内のデータを取得するために使用する GetData メソッドを実装します。
注
この例では、追加のデータベース タスクを実行するヘルパー メソッドも提供します。
' 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
// Retrieve data from a database.
public QueryResult GetData(string connectionString, string tableName, string schema)
{
// Create a new query result object.
QueryResult queryResult = new QueryResult();
// Create a connection to the database.
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
// Open the database connection.
connection.Open();
List<Column> columns = new List<Column>();
GetColumns(connection, tableName, schema, columns);
IList<QueryColumnMetadata> metadata = new List<QueryColumnMetadata>();
foreach (Column c in columns)
{
QueryColumnMetadata m = new QueryColumnMetadata();
m.Name = c.Name;
m.ColumnWidth = c.Length;
m.IsNullable = c.AllowNulls;
m.TypeInfo = c.TypeInfo;
metadata.Add(m);
}
StringBuilder fields = new StringBuilder();
if (metadata.Count == 0)
{
// When the table is not found, adding an asterix returns an error message.
fields.Append("*");
}
else
{
int fieldCount = metadata.Count;
bool isFirst = true;
for (int i = 0; i < fieldCount; i++)
{
QueryColumnMetadata m = metadata[i];
if (isFirst == false)
{
fields.Append(',');
}
isFirst = false;
fields.Append(EscapeName(m.Name));
queryResult.ColumnMetadata.Add(m);
}
}
// Create a new query object.
Query query = new Query();
// Create a SQL query statement.
query.Statement = "SELECT " + fields.ToString() + " FROM " + EscapeName(tableName);
// retrieve the query results.
QueryResult[] results = ExecuteQuery(connectionString, query);
// Add the query results to the list.
queryResult.QueryResults.AddRange(results[0].QueryResults);
}
// Return the query result.
return queryResult;
}
...
internal static string EscapeName(string name)
{
// Test if the value is already escaped.
if (name.StartsWith("[", StringComparison.Ordinal) && name.EndsWith("]", StringComparison.Ordinal))
{
// Return the string with no changes.
return name;
}
// Create a new string builder for the escaped string.
StringBuilder escapedName = new StringBuilder();
// Prepend the string with an opening bracket.
escapedName.Append('[');
// Loop through the string.
for (int i = 0; i < name.Length; i++)
{
char c = name[i];
if (c == ']')
{
escapedName.Append(']');
}
escapedName.Append(c);
}
// Append the string with an opening bracket.
escapedName.Append(']');
// Return the escaped string.
return escapedName.ToString();
}
スレッド セーフ
この型のパブリック静的 (Visual Basic で共有) メンバーはスレッド セーフです。 インスタンス メンバーがスレッド セーフであるとは限りません。