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 クラスである DataAdapterDataReader を、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 に格納されます。なお、CSVDataAdapterCSVDataReader よりも低速です。これは、Fill メソッドがすべてのデータをソースから取得してから返すためです。

以下の例では、"MyFile.csv" という名前のテーブルから EmailUsername カラムを選択します。

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 を通じて利用可能です。ライセンスをリクエストして、今すぐデータアプリの構築を始めましょう!