- PR -

「C#」 SQLServer一括コピーについて

投稿者投稿内容
もも
常連さん
会議室デビュー日: 2005/07/25
投稿数: 46
投稿日時: 2005-10-06 21:37
SQLServerのDBテーブルに、CSVファイルのデータをバルクコピーしたいの
ですが、"C#"で実装する方法がわかりません・・・・・

クライアントマシンから実行したいのですが、クライアントマシンには、
「Enterprise Manager」がインストールでれていないので、
バッチで実行することができません・・・・

どなたか、ご教授願えませんでしょうか。
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2005-10-06 22:40
お世話になります。

CSVファイルからテーブルにバルクコピーするDTSを作成し、
C#側からそのDTSを叩く。とかはどうでしょうか。

参考
[HOWTO] Visual Basic .NET での DTS パッケージ イベントの使用方法
momotchi
常連さん
会議室デビュー日: 2004/01/16
投稿数: 28
お住まい・勤務地: 宮城県
投稿日時: 2005-10-07 09:48
こんにちは。こんな感じどうでしょうか。

using System.Data.SqlClient;

using(SqlConnection cn = new SqlConnection(接続文字列))
using(SqlCommand cmd = new SqlCommand(@"BULK INSERT TABLE1 FROM 'D:\Data.csv' WITH (FIELDTERMINATOR = ',')", cn))
{
cn.Open();
cmd.ExecuteNonQuery();
}
もも
常連さん
会議室デビュー日: 2005/07/25
投稿数: 46
投稿日時: 2005-10-07 10:57
大変お世話になっています。

なおこ(・∀・)さん、momotchiさん、ありがとうございます。

DTSについてですが、CSVファイル名が可変のため、現在使用を見合わせて
います。(ご教授頂きながら、申し訳ありません)

BULK INSERT文を使用する方法ですが、試してみたのですが、
ファイルがopenできませんというエラーとなってしまいました。
CSVファイルがサーバに存在しているか、共有フォルダネットワークパスで
指定しなければならないことが、分かりました・・・・。

クライアントマシン内にある、CSVファイルを一括コピーすることは
不可能なのでしょうか・・・・
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2005-10-07 11:14
引用:

ももさんの書き込み (2005-10-07 10:57) より:
大変お世話になっています。

クライアントマシン内にある、CSVファイルを一括コピーすることは
不可能なのでしょうか・・・・



サーバーの共有ディレクトリにコピーしてから
momotchiさんの方法を実行する、とかはどうでしょう。
もも
常連さん
会議室デビュー日: 2005/07/25
投稿数: 46
投稿日時: 2005-10-07 11:24
なおこ(・∀・)さん返信ありがとうございます。

当初、サーバの共有ディレクトリにコピーするという
案もあったのですが、Windows認証の問題がでてきてしまいました・・・

すべてのクライアントが、サーバにアクセスできるのはセキュリティ
的に、あまりよくないということで、廃案になってしまったのです。

最初の書きこみに条件が足りずに申し訳ありません・・・
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2005-10-07 11:35
お世話になります。

引用:

ももさんの書き込み (2005-10-07 11:24) より:
なおこ(・∀・)さん返信ありがとうございます。

当初、サーバの共有ディレクトリにコピーするという
案もあったのですが、Windows認証の問題がでてきてしまいました・・・

すべてのクライアントが、サーバにアクセスできるのはセキュリティ
的に、あまりよくないということで、廃案になってしまったのです。


そうなんですか。

そうなると、DataAdapterやらDataSetやらDataTableやらを使って、
ローカルのCSVファイルをDataTableに流し込んで、
DataAdapter.Update(DataSet)しか、私は思いつかないです…。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-10-07 12:05
試したことはないので想像ですが、
・DTS パッケージを作成
・一括挿入 タスクを作成
・動的プロパティ タスクを作成し、一括挿入タスクの入力ファイル名をグローバル変数にバインド
・COM Interop で DTS.Package オブジェクトを作成
・GlobalVariables["変数名"] の値を設定
・実行
でできるような気が少しだけします。

スキルアップ/キャリアアップ(JOB@IT)