3

SQL Server に接続する標準の WinForms アプリケーションがあります。このアプリケーションを使用すると、ユーザーは現在データベースに保存されているドキュメントを、画像列を使用してテーブルにアップロードできます。

ドキュメントがファイルとして保存され、ファイルへのリンクがデータベース テーブルに保存されるように、このアプローチを変更する必要があります。

現在のアプローチを使用する - ユーザーがドキュメントをアップロードするとき、ユーザーはデータベースに接続しているため、ファイルが保存されている場所について何も知る必要がなく、特別なディレクトリ権限なども必要ありません。ドキュメントのネットワーク共有を設定する場合、ユーザーが既存のドキュメントにアップロードまたはアクセスするためにこのディレクトリにアクセスする必要があるなど、IT の問題を回避したいと考えています。

これを行うために利用できるオプションは何ですか? 現在のアプローチと同じ方法でドキュメントがアップロードされる一時データベースを用意し、サーバー上でこれらをファイル ストアに保存するプロセスを実行することを考えました。その後、このデータベースを削除して再作成し、スペースを再利用することができます。より良いアプローチはありますか?

追加情報: 私のアプリケーションには Web サーバー要素がないため、WCF サービスは可能ではないと思います

4

3 に答える 3

2

そもそもデータベースからファイルを取り出したい理由はありますか?

それらをSQLServerに保存し、代わりにFILESTREAMIMAGEを使用するのはどうですか?

リンクからの引用:

FILESTREAMを使用すると、SQL Serverベースのアプリケーションで、ドキュメントや画像などの非構造化データをファイルシステムに保存できます。アプリケーションは、豊富なストリーミングAPIとファイルシステムのパフォーマンスを活用すると同時に、非構造化データと対応する構造化データ間のトランザクションの一貫性を維持できます。

FILESTREAMは、varbinary(max)バイナリラージオブジェクト(BLOB)データをファイルシステムにファイルとして格納することにより、SQLServerデータベースエンジンをNTFSファイルシステムと統合します。Transact-SQLステートメントは、FILESTREAMデータの挿入、更新、クエリ、検索、およびバックアップを行うことができます。Win32ファイルシステムインターフェイスは、データへのストリーミングアクセスを提供します。

FILESTREAMは、ファイルデータのキャッシュにNTシステムキャッシュを使用します。これにより、FILESTREAMデータがデータベースエンジンのパフォーマンスに与える影響を減らすことができます。SQLServerのバッファプールは使用されません。したがって、このメモリはクエリ処理に使用できます。

したがって、両方の
長所を最大限に活用できます。ファイルはハードディスクにファイルとして保存されます(データベースに保存するよりも高速です)が、ファイル共有やアクセス許可などを気にする必要はありません。

を使用するには、少なくともSQLServer2008が必要であることに注意してくださいFILESTREAM

于 2012-05-17T13:50:06.560 に答える
1

アプリケーションにオブジェクトをデータベース内のプロシージャ(CLRなど)に渡すだけで、ファイルの内容を保存せずに、選択した場所にデータを書き出すことができます。そうすれば、ファイルストアとアプリケーションの間に抽象化レイヤーがありますが、後からクリーンアップするプロセスは必要ありません。

または、アプリケーションが接続するWCF/Webサービスを作成することもできます。Webメソッドを使用して、ファイルの内容を受け入れ、正しい場所に書き込むことができます。これにより、ファイルへのパスまたはファイル識別子が返される可能性があります。

于 2012-05-17T13:48:30.960 に答える
1

このタスクをどのように実装したかをお話しできます。アーカイブファイルの送信に使用されるWCFサービスを作成しました。ですから、もし私があなたなら、ファイルを保存して送り返すことができるようなサービスを作成するでしょう。これは簡単であり、WCFサービスが機能するコンテキストのユーザーが書き込みファイルの読み取りと書き込みのアクセス許可を持っていることも確認する必要があります。

于 2012-05-17T13:47:05.160 に答える