CData ADO.NET Provider とは?
CData ADO.NET Provider は、.NET アプリケーションを 270 以上のデータソース に接続し、それらをデータベースのように扱うことができる強力なツールです。データ統合を簡素化し、SaaS、NoSQL、ビッグデータなど、さまざまなデータとシームレスに連携できます。
CData ADO.NET Provider は ADO.NET 標準に準拠するよう綿密に設計されており、.NET アプリケーションとのシームレスな統合を実現します。接続プーリング、トランザクション管理、コマンド実行などの ADO.NET 機能との互換性が保証されているため、開発者は多様なデータソースを扱いながらも、使い慣れたツールやテクニックを活用できます。
この記事では、CData ADO.NET Provider を使用してデータソースへの接続、テーブルメタデータの取得、データのクエリ、ストアドプロシージャの実行方法を説明します。デモには CData ADO.NET Provider for CSV を使用しますが、CData がサポートする 270 以上のデータソースすべてに同じ原則が適用されます。
データソースへの接続
CData ADO.NET Provider for CSV は、標準の DbConnection オブジェクトを CSVConnection として実装しています。また、CSVConnectionStringBuilder を使用して、接続文字列をプログラムでビルド、解析、再構築することもできます。
Connection オブジェクトの作成
各プロバイダには、データソースへの接続に関する包括的なドキュメントが用意されています。CSV ドキュメントに接続するには、CSV ドキュメントのパス(例:C:\Users\Public\MyCSVs\)を指定して接続文字列を作成します。以下は、CSVConnection オブジェクトを作成する一般的な例です。
C#
using (CSVConnection connection =
new CSVConnection("URI=C:\Users\Public\MyCSVs\"))
{
connection.Open();
}
VB.NET
Using connection As New CSVConnection("URI=C:\Users\Public\MyCSVs\")
connection.Open
End Using
CSVConnectionStringBuilder の使用
以下のコード例は、ADO.NET 接続文字列ビルダーを使用して接続文字列を解析する方法を示しています。
C#
string conn_string = "URI= C:\Users\Public\MyCSVs\";
// 既存の接続文字列を接続文字列ビルダーに渡すと、各要素を厳密に型指定されたプロパティとして取得・設定できます。
CSVConnectionStringBuilder builder = new CSVConnectionStringBuilder(conn_string);
// CSV 接続文字列ビルダーオブジェクトをインスタンス化し、個々の項目を操作することもできます。
CSVConnectionStringBuilder builder = new CSVConnectionStringBuilder();
// ビルダーオブジェクト内の接続プロパティを参照して、個々の項目を操作できます。
builder.URI = "C:\Users\Public\MyCSVs\";
// 文字列を使用して接続キーを参照することもできます。
builder["URI"] = "C:\Users\Public\MyCSVs\";
VB.NET
Dim conn_string As String = "URI=C:\Users\Public\MyCSVs\"
' 既存の接続文字列を接続文字列ビルダーに渡すと、各要素を厳密に型指定されたプロパティとして取得・設定できます。
Dim builder As New CSVConnectionStringBuilder(conn_string)
' CSV 接続文字列ビルダーオブジェクトをインスタンス化し、個々の項目を操作することもできます。
Dim builder As New CSVConnectionStringBuilder()
' ビルダーオブジェクト内の接続プロパティを参照して、個々の項目を操作できます。
builder.URI = "C:\Users\Public\MyCSVs\"
' 文字列を使用して接続キーを参照することもできます。
builder("URI") = "C:\Users\Public\MyCSVs\"
メタデータ呼び出しによるスキーマの検出
接続が完了したら、メタデータ呼び出しを使用してデータの構造を探索できます。プロバイダは、ADO.NET クラスまたはシステムテーブルに対する SQL クエリを通じてスキーマの検出をサポートしています。ADO.NET クラスを使用すると、スキーマの詳細、接続プロパティ、カラム情報にアクセスできます。
テーブル、ビュー、カラムはデータベースの通常の構成要素ですが(ADO.NET プロバイダは一般的にこれらに接続します)、ファイルストア、サービス、SaaS アプリケーションでは必ずしも同じ意味を持つとは限りません。CData の ADO.NET プロバイダは、これらの非リレーショナルソースの構造を表形式モデルに変換します。
- エンティティとオブジェクトはビュー(読み取り専用)またはテーブル(読み書き可能)として表示されます
- フィールドと属性はカラムとして表示されます
たとえば、CSV 形式のファイルを含むディレクトリのメタデータには、各ファイルに対応するテーブルと、そのファイル内のフィールドに対応するカラムが含まれます。
システムテーブルは、データベースシステムがデータベース自体に関するメタデータ情報を格納するために維持する特別なテーブルです。テーブル、カラム、インデックス、制約、ユーザー、権限などのデータベースオブジェクトに関する詳細が含まれています。システムテーブルをクエリすることで、スキーマと接続プロパティの詳細、データソースの機能に関する洞察、更新操作の統計情報を取得できます。
ADO.NET では、GetSchema メソッドを使用してシステムテーブル(またはシステムカタログビュー)をクエリできます。このメソッドは、Tables、Columns、Indexes、Views などのスキーマコレクションを提供します。
以下は、テーブルとカラムのスキーマを検索する例です。
テーブル
Tables スキーマコレクションは、ビューを含む、データベース内のすべてのテーブルを一覧表示します。
テーブル一覧の取得
Tables スキーマコレクションを取得するには、CSVConnection クラスの GetSchema メソッドを呼び出します。以下のコードは、テーブルの名前を出力します(各テーブルは、URI 接続プロパティで指定されたディレクトリ内の CSV 形式のファイルを表します)。
C#
String connectionString = "URI=C:\Users\Public\MyCSVs\";
using (CSVConnection conn = new CSVConnection(connectionString)) {
conn.Open();
DataTable databaseSchema = conn.GetSchema("Tables");
foreach (DataRow row in databaseSchema.Rows) {
Console.WriteLine(row["TABLE_NAME"]);
}
}
VB.NET
Dim connectionString As String = "URI=C:\Users\Public\MyCSVs\"
Using conn As New CSVConnection(connectionString)
conn.Open()
Dim databaseSchema As DataTable = conn.GetSchema("Tables")
For Each row As DataRow In databaseSchema.Rows
Console.WriteLine(row("TABLE_NAME"))
Next
End Using
カラム
データベース内のカラムのメタデータにアクセスするには、Columns スキーマコレクションを取得します。ビューの場合は、ViewColumns スキーマコレクションを取得することでカラムメタデータを取得できます。
また、結果セットからメタデータを取得することもできます。結果セットのメタデータには、Columns または ViewColumns スキーマコレクションと同じカラムが含まれています。以下を参照してください。
カラムメタデータの取得
CSVConnection クラスの GetSchema メソッドを呼び出して、Columns または ViewColumns スキーマコレクションを取得します。以下の例のように、テーブル名で結果を絞り込むことができます。
C#
string connectionString = "URI=C:\Users\Public\MyCSVs\";
using (CSVConnection conn = new CSVConnection(connectionString)) {
conn.Open();
DataTable databaseSchema = conn.GetSchema("Columns", new string[] {"[MyFile.csv]"});
foreach (DataRow column in databaseSchema.Rows) {
Console.WriteLine(column["COLUMN_NAME"]);
Console.WriteLine(column["IS_KEY"]);
Console.WriteLine(column["DATA_TYPE"]);
}
}
VB.NET
Dim connectionString As String = "URI=C:\Users\Public\MyCSVs\"
Using conn As New CSVConnection(connectionString)
conn.Open()
Dim databaseSchema As DataTable = conn.GetSchema("Columns", New String() {"[MyFile.csv]"})
For Each column As DataRow In databaseSchema.Rows
Console.WriteLine(column("COLUMN_NAME"))
Console.WriteLine(column("IS_KEY"))
Console.WriteLine(column("DATA_TYPE"))
Next
End Using
データのクエリと結果の取得
CData ADO.NET Provider for CSV は、CSV ファイルからデータを取得するための ADO.NET クラスである DataAdapter と DataReader を、CSVDataAdapter および CSVDataReader として実装しています。CSVDataAdapter はクエリに一致する完全な ResultSet を取得し、CSVDataReader は必要に応じてデータをサブセットで取得します。
CSVDataReader の使用
CSVDataReader は、データをページ単位で処理するため、CSVDataAdapter よりも高速にデータを取得できます。データを読み取る際、必要に応じてデータソースから次のページの結果を定期的にリクエストするため、より高速な取得が可能です。以下の例では、"MyFile.csv" テーブルからすべてのカラムを選択します。
C#
string connectionString = "URI=C:\Users\Public\MyCSVs\";
using (CSVConnection connection = new CSVConnection(connectionString)) {
CSVCommand cmd = new CSVCommand("SELECT * FROM [MyFile.csv]", connection);
CSVDataReader rdr = cmd.ExecuteReader();
while (rdr.Read()) {
Console.WriteLine(String.Format(" {0} --> {1}", rdr["Email"], rdr["Username"]));
}
}
VB.NET
Dim connectionString As String = "URI=C:\Users\Public\MyCSVs\"
Using connection As New CSVConnection(connectionString)
Dim cmd As New CSVCommand("SELECT * FROM [MyFile.csv]", connection)
Dim rdr As CSVDataReader = cmd.ExecuteReader()
While rdr.Read()
Console.WriteLine([String].Format(vbTab & "{0} --> " & vbTab & vbTab & "{1}", rdr("Email"), rdr("Username")))
End While
End Using
CSVDataAdapter の使用
アダプターの Fill メソッドを使用して、データソースからデータを取得します。空の DataTable インスタンスを引数としてメソッドに渡します。実行すると、クエリされたデータが DataTable に格納されます。なお、CSVDataAdapter は CSVDataReader よりも低速です。これは、Fill メソッドがすべてのデータをソースから取得してから返すためです。
以下の例では、"MyFile.csv" という名前のテーブルから Email と Username カラムを選択します。
C#
string connectionString = "URI=C:\Users\Public\MyCSVs\";
using (CSVConnection connection = new CSVConnection(connectionString)) {
CSVDataAdapter dataAdapter = new CSVDataAdapter(
"SELECT Email, Username FROM [MyFile.csv]", connection);
DataTable table = new DataTable();
dataAdapter.Fill(table);
Console.WriteLine("Contents of MyFile.csv");
foreach (DataRow row in table.Rows) {
Console.WriteLine("{0}: {1}", row["Email"], row["Username"]);
}
}
VB.NET
Dim connectionString As String = "URI=C:\Users\Public\MyCSVs\"
Using connection As New CSVConnection(connectionString)
Dim dataAdapter As New CSVDataAdapter("SELECT Email, Username FROM [MyFile.csv]", connection)
Dim table As New DataTable()
dataAdapter.Fill(table)
Console.WriteLine("Contents of MyFile.csv.")
For Each row As DataRow In table.Rows
Console.WriteLine("{0}: {1}", row("Email"), row("Username"))
Next
End Using
ストアドプロシージャを使用したアクションの実行
ストアドプロシージャは、CSV に対する単純な SELECT/INSERT/UPDATE/DELETE 操作を超えて、プロバイダの機能を拡張する関数のようなインターフェースです。
ストアドプロシージャは、パラメータのリストを受け取り、目的の機能を実行した後、CSV からの関連するレスポンスデータと、プロシージャが成功したか失敗したかの結果を返します。
このセクションでは、ローカルまたはクラウドストレージからファイルを移動するのに役立つストアドプロシージャ "MoveFile" を実行します。
プロシージャ固有の情報
このプロシージャは以下のパラメータを受け取ります。
- SourcePath:移動するファイルのパス。
- DestinationPath:ファイルの移動先フォルダのパス。
両方の PATH パラメータは、移動するファイルへの相対パスと絶対パスの両方を受け付けます。
- 絶対パスの使用:D:\folder1\file1.csv を指定すると、ファイルがソースパス D:\folder1 からデスティネーションパス D:\folder2 に移動されます。
- 相対パスの使用:file1.csv を指定すると、{CONNECTION STRING URI}/file1.csv で指定されたパスからファイルが移動されます。接続文字列の URI が D:\folder1 に設定されている場合、\folder1\file1.csv からファイルが移動されます。
プロシージャは以下のように実行します。
EXEC MOVEFILE @SourcePath = "D:\TestFolder\Account.csv" @DestinationPath = "D:\SampleFolder" //絶対パス
EXEC MOVEFILE @SourcePath = 'Account.csv' @DestinationPath = 'SampleFolder' //相対パス
データ開発者向け無料 Community ライセンス
CData ADO.NET Provider は、SaaS、NoSQL、ビッグデータシステムなど、従来のデータベースを超える 270 以上のデータソースへの一貫した SQL ベースの接続を提供し、ADO.NET の機能をさらに強化します。DataReader と DataAdapter による効率的なクエリ、データ変更、データ処理、バッチ処理、トランザクション管理、接続プーリング、ストアドプロシージャの呼び出しなど、高度な機能を備えています。
CData ADO.NET Community ライセンスを使用すると、個人の .NET プロジェクトでデータにアクセスするための無期限無料ライブラリを取得できます。すべて使い慣れた SQL を通じて利用可能です。ライセンスをリクエストして、今すぐデータアプリの構築を始めましょう!