お世話になります。
C#からSQLserverへ接続し、CSVファイルを指定してBULK INSERTしています。
下記のコードを実行すると、実行を繰り返した分テーブルに追加されます。
なのでこれを追加するのではなく、更新、またはテーブルのデータを削除
してからINSERTするような処理(削除処理後にCSVを追加)をしたいのですが、やり方が分かりません。
ネットでUPDATE文やDELETE文を調べたのですが、上記の処理を行う
やり方が見つからず、困っています。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.SqlClient; using System.Data.Sql; using System.IO; namespace 練習 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //接続 using (SqlConnection cn = new SqlConnection(@"Data Source=DESKTOP-U6R2QM8\SQLEXPRESS;Initial Catalog=マスタ機能;Integrated Security=True")) //CSVファイルを指定してBULK INSERT using (SqlCommand cmd = new SqlCommand(@"BULK INSERT 拠点 FROM 'C:\Users\yuhor\OneDrive\デスクトップ\拠点.csv' WITH (FIELDTERMINATOR = ',')", cn)) { cn.Open(); cmd.ExecuteNonQuery(); } } } }
※ Visual Studio 2015、SQLserver 2019 使用
宜しくお願い致します。
sql server レコード 全削除 ・・・などをキーワードにググればやり方は見つかると思うのですが?
> やり方が見つからず、困っています。
テーブルのデータを削除するSQLの書き方が見つからないということは考えづらいのですが、何のやりかたが分からないのですか?(拠点テーブルのデータを全て削除するSQLが `DELETE FROM 拠点` だということは分かりますよね?)
SurferOnWwwさん
説明不足でした。
削除する場合、削除処理を書いて実行すると、ボタンを押したときテーブルのデータは削除されますが、
質問コードだとボタンを押したら、CSVファイルの中身をINSERTしてから削除されるので、結果的にテーブルにはデータが何もない状態になります。
実現したいこととして、
ボタン押下→テーブルにある既存のデータを削除→CSVファイルの中身をINSERTするような流れにして、ボタンを押すごとに行が追加されないようにしたいです。
ku__ra__geさん
説明不足でした。申し訳ありません。
削除する場合、削除処理を書いて実行すると、ボタンを押したときテーブルのデータは削除されますが、
質問コードだとボタンを押したら、CSVファイルの中身をINSERTしてから削除されるので、結果的にテーブルにはデータが何もない状態になります。
実現したいこととして、
ボタン押下→テーブルにある既存のデータを削除→CSVファイルの中身をINSERTするような流れにして、ボタンを押すごとに行が追加されないようにしたいです。
> 削除する場合、削除処理を書いて実行すると、ボタンを押したときテーブルのデータは削除されますが、
質問コードだとボタンを押したら、CSVファイルの中身をINSERTしてから削除されるので、結果的にテーブルにはデータが何もない状態になります。
削除処理後にCSVを追加すればいいと思うのですが、そういう話ではなく?
radianさん
いえ!そういうことです(削除処理後にCSVを追加したい、と書けばよかったです…)。
僕も削除処理後にCSVを追加したいと思い、
string delete = "DELETE FROM 拠点";
cmd.CommandText = delete;
上記処理を考え、 using (SqlConnection~ using (SqlConnectionの間に記述しようとしたのですが、エラーになり出来ません。
書き方や、書く場所がおかしいのでしょうか。
話の流れからは、接続と insert の間に delete を入れればいいとしか思えません。何が問題になっているのかを明確にしてください。失敗したコードを追記すれば何かわかるかもしれません。
> 質問コードだとボタンを押したら、CSVファイルの中身をINSERTしてから削除されるので、結果的にテーブルにはデータが何もない状態になります。
質問のコードのどこに「削除」しているところがあるのですか? BULK INSERT の他には見当たらないようですが?
「エラーになり出来ません。」じゃ伝わるわけないでしょ。
その試した処理と実際に発生したエラーの詳細を質問文に書こう。
今のままじゃただ「わからんから誰か代わりに書いてくれ」と言ってるようにしか見えん。
Zuishinさん
申し訳ありません。
接続と insert の間に delete を入れる処理の書き方が分からなかったのですが、
自己解決できました(自己解決方法を記載いたします)。
コメントありがとうございました。
SurferOnWwwさん
DELETE文を誤って消してしまっていました…。
自己解決できましたので下記に自己解決方法を記載いたします。
コメントありがとうございました。
gentaroさん
おっしゃる通りです。質問の仕方が甘かったです…。
自己解決することが出来ましたので、下記に解決方法を記載いたします。
コメントありがとうございました。
回答1件
あなたの回答
tips
プレビュー