|
分類:[C#]
はじめまして、河童と申します。 よろしくお願いします。
CSVファイル内のデータを複数取得して、 それをテーブルにインサートする方法を教えてください。
現状の処理のコードを簡素化したいと思っています。 アドバイス、よろしくお願いします。
1.CSVファイルについて CSVファイルの構成は、 2行(HEAD行とDATA行)でデータの項目数が変化します。 帳票名がキーになります。 項目は1から10まであり、ファイルの中身は変化します。 DATAの値をテーブルにインサートします。 最後に読み込んだファイルを最新のデータとして、 同じ帳票名を読み込んだ場合はデリートインサートします。
帳票1.csv HEAD,帳票名,項目1,項目2,項目3 DATA,帳票1,aaa,bbb,ccc
帳票2.csv HEAD,帳票名,項目1,項目3,項目4,項目5 DATA,帳票2,aaa,ccc,ddd,eee
2.テーブル構成 t_chouhyou: chouhyoumei・・・テキスト koumoku1・・・テキスト koumoku2・・・テキスト koumoku3・・・テキスト koumoku4・・・テキスト koumoku5・・・テキスト koumoku6・・・テキスト koumoku7・・・テキスト koumoku8・・・テキスト koumoku9・・・テキスト koumoku10・・・テキスト toukudate・・・テキスト
3.現状の処理について 3-1最大10項目分の変数を準備 public class Chouhyou { public string chouhyoumei { get; set; } public string koumoku1 { get; set; } public string koumoku2 { get; set; } public string koumoku3 { get; set; } public string koumoku4 { get; set; } public string koumoku5 { get; set; } public string koumoku6 { get; set; } public string koumoku7 { get; set; } public string koumoku8 { get; set; } public string koumoku9 { get; set; } public string koumoku10 { get; set; } }
private Chouhyou makeChouhyou() { Chouhyou ch = new Chouhyou(); ch.chouhyoumei = ""; ch.koumoku1 = ""; ch.koumoku2 = ""; ch.koumoku3 = ""; ch.koumoku4 = ""; ch.koumoku5 = ""; ch.koumoku6 = ""; ch.koumoku7 = ""; ch.koumoku8 = ""; ch.koumoku9 = ""; ch.koumoku10 = "";
return ch; }
3-2HEADに対応するDATAを取得 ヘッダが項目1のときのDATAを取得します。 public string CSV_GetKoumoku1(CSVLine csvList) { string result = "";
// 項目があるか int touroku = csvList.csvData.Select(n => n.header).ToList().IndexOf("項目1");
// 0未満の場合なし if (touroku < 0) { return ""; } result = csvList.csvData[touroku].data; return result; }
3-3DATAをテーブルにインサート 引数として各項目のDATAと登録日時 public int insChouhyou(HyoujiData hyoujidata, string strdate) { try { MySqlCommand cmd;
string sql = ""; sql = string.Format("INSERT INTO t_chouhyou VALUE('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}')", hyoujidata.chouhyoumei, hyoujidata.koumoku1, hyoujidata.koumoku2, hyoujidata.koumoku3, hyoujidata.koumoku4, hyoujidata.koumoku5, hyoujidata.koumoku6, hyoujidata.koumoku7, hyoujidata.koumoku8, hyoujidata.koumoku9, hyoujidata.koumoku10, strdate);
BeginTransaction(); cmd = new MySqlCommand(sql, this.conn); cmd.ExecuteNonQuery(); CommitTransaction();
return 0; } catch (MySqlException ex) { Console.WriteLine(ex.ToString()); return -1; } catch { return -1; } }
4.困っていること CSVファイルの中身を常に最大項目数(10項目)にするのが難しいこと。 3-2で同じ処理を10回繰り返しているので、ここでコードを簡略化したいこと。 3-3で取得した項目をすべて並べているので、ここでコードを簡略化したいこと。 DATAをテーブルにインサートすること自体はできているのですが、 今後項目数が増えるかもしれないこととどうやってコードの簡略化ができるのか 私自身の興味と勉強のため方法を知りたいです。 何卒皆様のお知恵を拝借させてください。 よろしくお願いします。
|