1

Delphi と MS SQL Server を使用して win32 Windows アプリケーションを開発しています。LAN では正常に動作しますが、SQL Server リモート接続のサポートを追加しようとしています (= この記事で説明されているように、外部 IP でアクセスできる DB を操作します: http://support.microsoft.com/default .aspx?scid=kb;EN-US;914277 )。

基本的に、DB にテーブルがあり、DocumentID、ドキュメントの説明、およびドキュメント パス (のような\\FILESERVER\MyApplicationDocuments\45.zip) を保持します。

もちろん\\FILESERVER、これはサーバー用のローカル (LAN) パスですが、クライアント用ではありません (リモート接続のサポートを追加しようとしているため)。

なので\\FILESERVER、もちろんLANで見えなくてもアクセスできる手段が必要です。

「ダウンロード トリック」に最適な次の T-SQL コード スニペットを見つけました。

BulkColumn を MyFile FROM OPENROWSET(BULK '\FILESERVER\MyApplicationDocuments\45.zip' , SINGLE_BLOB) AS X として選択します。

上記のコードを使用して、クライアントにファイルをダウンロードできます。

しかし、それをアップロードする方法は?新しいファイルを挿入できるだけでなく、既存のファイルを削除または置換するには、「アップロード トリック」が必要です。

誰でも提案できますか?トリックが利用できない場合は、代替案を提案できますか? 拡張ストアド プロシージャや、サーバーからの .net アセンブリの呼び出しのように。

4

3 に答える 3

1

SQL 2008 を使用している場合は、FILESTREAMを使用できます。SQLサーバーは自動的にそれをディスクにスローします。

SQL 2005 を使用している場合は、データをvarbinary(max)列に移動して、そのように処理することを検討します (これも非常に簡単です)。

これらのどちらにも当てはまらない場合、または varbinary 列に押し込めない場合は、SQL Server を使用して実際のファイルの内容を処理せず、代わりに、ファイル システムまたは SAN にファイルを格納する Web サービスを使用します。 Web サービスに簡単にアクセスできます。(私見と同じ)

更新:私の頭をよぎったもう1つのアイデア。SQL 2005/08 を使用している場合は、CLR ストアド プロシージャを .Net で記述できます。これにより、ローカル ファイル システムとの間での BLOB データの転送を処理できます。

于 2010-04-27T13:20:02.673 に答える
0

2005 の場合は、一時テーブルの一時 BLOB フィールドにファイルを格納してから、必要な場所にファイルを配置する必要があるストアド プロシージャを呼び出し、必要に応じてパス フィールドを更新することができます。

そのストアド プロシージャでは、ファイル システムへのアクセスを許可する拡張ストアド プロシージャ (xp_something) を使用する必要があります。つまり、SQL サーバーに対して有効にする必要があります。

ところで、リレーショナル DB をドキュメント データベースとして使用しようとしています。それは、遅かれ早かれ裏目に出ます。

于 2010-04-30T01:04:29.287 に答える
0

理想的な世界では、次のような単純なものを作成します。 - ASP.NET Web サービス - または .Net Remoting Service (Web サービスよりも高速) - または新しい .Net 4.0 RIA サービス。

カスタム TCP/IP ポートで SQL Server にデプロイします。

このサービスはポートをリッスンし、クライアントはサービスを介してファイルを要求します。サービスは、ローカル LAN 経由でファイルを取得し、ローカル OLE DB 接続経由で DB と通信します。

SQl Server の「Web サービス」サポートは使用しません。これはセキュリティとパフォーマンスの問題です。

更新:これはDelphiアプリであるため、上記のソリューションはまだ有効ですが、Delphiを使用して同じことを行うことができますが、さまざまなテクノロジーを統合するための作業が増えます. Delphi には、リモート アプリケーションを構築するための独自のツールがあります。

于 2010-04-27T13:06:17.960 に答える