いつもお世話になります。
C#で、CSVファイルの中身をSQLserver上のテーブルへ登録する
アプリを作っています(Windowsフォームアプリ)。
CSVファイルの中身を1行ずつ読み込み、登録していくのですが、
下記コードのINSERTの部分で、エラーメッセージ
「インデックスが配列の境界外です。」が発生している状況です。
調べたところ、配列の要素数に誤りがあった時などに
発生するエラーだと思うのですが、対処方法が分かりません。
デバッグの結果、foreachの部分で
lists がCount = 3 になっており、ここに誤りがあるのかな
と考えているのですが…。
対処方法など、ご存じの方がいらっしゃいましたら
教えていただきたく質問しました。
よろしくお願いいたします。
CSVファイルの中身
1,東京,
Visual Studio 2015
SQL Server Management Studio 2019 を使用
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.IO; using System.Collections; using System.Data.Sql; using System.Data.SqlClient; namespace 練習2 { 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")) { cn.Open(); //----------------------------------------------------------------------------------------------------------------------------------------------------- // 削除処理(追加されないようにするためテーブルのデータを消す) SqlCommand command = new SqlCommand( @"BULK INSERT 拠点 FROM 'C:\Users\yuhor\OneDrive\デスクトップ\CSVファイル\拠点.csv' WITH (FIELDTERMINATOR = ',')", cn); string delete = "DELETE FROM 拠点"; command.CommandText = delete; command.ExecuteNonQuery(); //----------------------------------------------------------------------------------------------------------------------------------------------------- SqlCommand cmd = new SqlCommand(); try { // CSVファイルの読み込み using (StreamReader sr = new StreamReader(@"C:\Users\yuhor\OneDrive\デスクトップ\CSVファイル\拠点.csv")) { // 末尾まで繰り返す while (!sr.EndOfStream) { // CSVファイルの1行を読み込む string line = sr.ReadLine(); // 読み込んだ1行をカンマごとに分けて配列に格納 string[] values = line.Split(','); // 配列からリストに格納する List<string> lists = new List<string>(); lists.AddRange(values); foreach (var list in lists) { cmd.Connection = cn; // エラーメッセージが発生した場所↓ cmd.CommandText = @"INSERT INTO 拠点(コード, 拠点) VALUES('" + list[0] + "','" + list[1] + "')"; cmd.ExecuteNonQuery(); } } } } catch (Exception ex) { MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { cn.Close(); } } } } }
回答1件
あなたの回答
tips
プレビュー