SQL アダプターを使用すると、アダプター クライアントは、大きなデータ型 (varchar(max)、nvarchar(max)、または varbinary(max) の列のデータを読み取って更新できます。 このような列からデータを読み取るために、アダプター クライアントは Select 操作を使用できます。 このような列にデータを挿入または更新するために、アダプターは Set<column_name> 操作を公開します。ここで、<column_name> は varchar(max)、nvarchar(max)、または varbinary(max) 型の列の名前です。
さらに、SQL Server では、varbinay(max) 列にテキスト ドキュメントや画像などの非構造化データを格納させることができます。 このような非構造化データは FILESTREAM データと呼ばれます。 FILESTREAM データは、ファイル システム上のファイルとして格納できます。 SQL アダプターを使用すると、クライアントは varbinary(max) 型の列に FILESTREAM データを入力できます。 FILESTREAM ストレージ には、詳細情報があります。
このトピックでは、SQL Server を実行しているコンピューターと、FILESTREAM データを挿入または更新するためにアダプター クライアントを実行しているコンピューターで実行する必要がある特定のタスクについて説明します。 このトピックでは、FILESTREAM データを挿入するための Set<column_name> 操作の実行手順についても説明します。
注
ユーザー定義型の列を持つテーブルに対して操作を実行する場合は、 SQL アダプターを使用して、User-Defined 型を持つテーブルとビューに対する操作を参照してください。
[前提条件]
SQL Server を実行しているコンピューターとアダプター クライアントを実行しているコンピューターで、次のタスクを実行する必要があります。
SQL Server を実行しているコンピューター上
SQL Server インスタンスで FILESTREAM を有効にする必要があります。 FILESTREAM の有効化と構成を参照してください。
FILESTREAM 対応データベースを作成する必要があります。 「 FILESTREAM-Enabled データベースの作成」を参照してください。
FILESTREAM データを格納するためのテーブルが必要です。 FILESTREAM データを格納するためのテーブルの作成を参照してください。
アダプター クライアントを実行しているコンピューターで
- SQL Client Connectivity SDK がインストールされている必要があります。 SQL Server セットアップを実行し、ウィザードの [機能の選択] ページで SQL Client Connectivity SDK を選択することで、SQL Client Connectivity SDK をインストールできます。 アダプターは、SQL Client Connectivity SDK と共にインストールされた sqlncli10.dllを使用して FILESTREAM 操作を実行します。
これらのタスクを完了すると、SQL Server データベース テーブルに FILESTREAM データを挿入または更新するように設定されます。
このトピックで大規模なデータ型に対する操作を示す方法
大きなデータ型を持つテーブルに対して Set<column_name> 操作を実行する方法を示すには、列 ID と Document を含むテーブル Records を取得します。
すべてのデータを含む Records テーブルは、サンプルで提供される SQL スクリプトを実行して作成されます。 詳細については、「 アダプターのサンプル」を参照してください。
Id 列は uniqueidentifier 型で、GUID を受け取ります。 ID 列に既に GUID '
438B7B4C-5491-409F-BCC1-78817C399EC3' があるとします。Document 列の型は VARBINARY(MAX) です。 Document 列を更新するために、アダプターは SetDocument 操作を公開します。
注
SQL Server の場合、FILESTREAM 操作を示すために、 Document 列に FILESTREAM データを格納できることを前提としています。
このトピックで使用する例について
このトピックの例では、 Records テーブルに対して操作を実行します。 Records テーブルは、サンプルで提供される SQL スクリプトを実行して作成されます。 サンプルの詳細については、「アダプターの サンプル」を参照してください。 このトピックに基づく サンプル Records_FILESTREAM_Opも、SQL アダプターのサンプルと共に提供されています。
WCF クライアント クラス
SQL アダプターが検出する大規模なデータ型に対する操作に対して生成される WCF クライアントの名前は、次の表に示すように、テーブルまたはビューの名前に基づいています。
| SQL Server データベースアーティファクト | WCF クライアント名 |
|---|---|
| 表 | TableOp_[Schema]_[TABLE_NAME]Client |
| 表示 | ViewOp_[スキーマ]_[VIEW_NAME]クライアント |
[SCHEMA] = SQL Server アーティファクトのコレクション。たとえば、dbo です。
大規模なデータ型の列に対する操作を呼び出すためのメソッド シグネチャ
次の表は、テーブルに対する基本的な操作のメソッド シグネチャを示しています。 シグネチャはビューに対して同じですが、ビューの名前空間と名前がテーブルの名前に置き換えられる点が異なります。
| オペレーション | メソッド シグネチャ |
|---|---|
| Set<column_name> | public void Set<column_name>(string Filter, byte[] Data); |
< column_name> = 大きなデータ型の列の名前。
例として、次のコードは、既定の "dbo" スキーマの下にある Records テーブルに対する SetDocument 操作用に生成された WCF クライアント クラスのメソッド シグネチャを示しています。
public partial class TableOp_dbo_RecordsClient : System.ServiceModel.ClientBase<TableOp_dbo_Records>, TableOp_dbo_Records {
public void SetDocument (string Filter, byte[] Data);
}
このスニペットでは、 TableOp_dbo_RecordsClient アダプター サービス参照プラグインによって生成されたSqlAdapterBindingClient.csの WCF クラスの名前です。
大規模なデータ型の列に対する操作のパラメーター
このセクションでは、Set<column_name> 操作に必要なパラメーターについて説明します。
| パラメーター名 | 説明 |
|---|---|
| 文字列フィルター | アダプターが大きなデータ型の列のレコードを更新する WHERE 句を指定します。 |
| byte[] データ | 大きなデータ型の列に対して更新する必要がある値を指定します。 |
Set<column_name> 操作は値を返しません。
大きなデータ型の列に対する操作を呼び出す WCF クライアントの作成
WCF クライアントを使用して SQL Server で操作を実行するために必要な一連の一般的なアクションには、「SQL アダプターを使用した WCF サービス モデルの概要」で説明されている一連のタスクが含まれます。 このセクションでは、レコード テーブルに対して SetDocument 操作を呼び出す WCF クライアントを作成する方法について説明します。 アダプターは、大きなデータ型の列のデータを更新する SetDocument 操作を公開します。
WCF クライアントを作成するには
Visual Studio で Visual C# プロジェクトを作成します。 このトピックでは、コンソール アプリケーションを作成します。
Records テーブルに対する SetDocument 操作の WCF クライアント クラスを生成します。 WCF クライアント クラスの生成の詳細については、「 SQL Server 成果物の WCF クライアントまたは WCF サービス コントラクトを生成する」を参照してください。
ソリューション エクスプローラーで、
Microsoft.Adapters.Sql、Microsoft.ServiceModel.Channels、System.Transactionsへの参照を追加します。Program.cs ファイルを開き、
System.Transactions名前空間を追加します。Program.csで、次のスニペットで説明するようにクライアントを作成します。
TableOp_dbo_RecordsClient client = new TableOp_dbo_RecordsClient("SqlAdapterBinding_TableOp_dbo_Records"); client.ClientCredentials.UserName.UserName = ""; client.ClientCredentials.UserName.Password = "";このスニペットでは、
TableOp_dbo_RecordsClientはSqlAdapterBindingClient.csで定義されている WCF クライアントです。 このファイルは、アダプター サービス参照の追加プラグインによって生成されます。SqlAdapterBinding_TableOp_dbo_Recordsはクライアント エンドポイント構成の名前であり、app.configで定義されます。このファイルは、アダプター サービス参照プラグインの追加によっても生成され、バインドプロパティとその他の構成設定が含まれています。注意事項
FILESTREAM データに対する操作を実行するには、常に Windows 認証を使用して SQL Server に接続する必要があります。 Windows 認証を使用して接続するには、前のスニペットに示すように、空のユーザー名とパスワードを指定する必要があります。 また、Windows 認証を使用して SQL Server に接続する前に、「SQL アダプターでの Windows 認証を使用した SQL Server への接続」で説明されている手順を実行しておく必要があります。
注
このスニペットでは、構成ファイルのバインドとエンドポイント アドレスを使用します。 コードでこれらの値を明示的に指定することもできます。 クライアント バインドを指定するさまざまな方法の詳細については、「 SQL アダプターのクライアント バインドを構成する」を参照してください。
次のスニペットの説明に従って、クライアントを開きます。
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }Records テーブルに対して SetDocument 操作を呼び出します。
注意事項
Set<column_name> 操作は常にトランザクションで実行する必要があります。 これを確実に行うには、トランザクション スコープ内で Set<column_name> 操作を呼び出す必要があり、 app.configで UseAmbientTransaction バインド プロパティを true に設定する必要があります。
using (TransactionScope tx = new TransactionScope()) { string filter = "WHERE Id='438B7B4C-5491-409F-BCC1-78817C399EC3'"; byte[] data = ASCIIEncoding.ASCII.GetBytes("Sample data"); client.SetDocument(filter, data); tx.Complete(); }ここでは、アプリケーションは文字列 "Sample data" を base64 でエンコードされた文字列に変換し、フィルター条件を満たすレコード内で更新します。
次のスニペットで説明されているように、クライアントを閉じます。
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();プロジェクトをビルドし、実行します。 アプリケーションは、レコード テーブルのドキュメント列を更新します。