C# で使用する SQL 文を外部テキストにして String.Format でデータ部分を置き換えて利用する

基本的には、String.Format メソッドのお話ですが、文字列の配列の扱い(ListArrayList)や正規表現のオプションと置換方法が注意事項です。
01.-- ******************************
02.-- 社員マスタ更新
03.-- ******************************
04.  
05.UPDATE 社員マスタ
06.set
07.氏名 = '{1}',
08.給与 = {2},
09.-- 行コメント
10.生年月日 = {3}
11. 
12.--
13.  
14.where 社員コード = '{0}'
15.  
16.-- 行コメント

行コメントは、正規表現で削除します。{} 部分の個数より、配列が大きい必要があり、Nothing が指定されると、{} ごとなくなります。
※ 配列のリサイズが必要な場合は、Array.Resize メソッドで行います。

オンラインの正規表現テストツール

(?m) は複数行モードのオプションです。m に対して s だと単一行モードになります
001.using System;
002.using System.Collections;
003.using System.Collections.Generic;
004.using System.IO;
005.using System.Text;
006. 
007.namespace text_input
008.{
009.        class Program
010.        {
011.                static void Main(string[] args)
012.                {
013.                        // 入力ファイルのパス
014.                        string[] arguments = Environment.GetCommandLineArgs();
015.                        // 引数は一つのみ許可
016.                        if (arguments.Length != 2)
017.                        {
018.                                Console.WriteLine("引数を指定して下さい");
019.                                return;
020.                        }
021. 
022.                        // 引数から取得
023.                        string filePath = arguments[1];
024. 
025.                        // パスを表示
026.                        Console.WriteLine(filePath);
027. 
028.                        // *********************************
029.                        // ▼ 関数呼び出しを記述して、ALT + Enter で自動作成
030.                        // *********************************
031.                        string textData = loadTextData(filePath);
032. 
033.                        // *********************************
034.                        // 行コメントの削除
035.                        // ▼ 正規表現のオプション
036.                        // https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/regular-expression-options
037.                        // *********************************
038.                        string pattern = "(?m)^--.*";   // 複数行モード
039.                        textData = System.Text.RegularExpressions.Regex.Replace(textData, pattern, "");
040. 
041.                        Console.Write(textData);
042. 
043.                        // *********************************
044.                        // 配列の準備(1)
045.                        // *********************************
046.                        string[] data1 = { "0001", "山田太郎", "100000", "'1980/01/01'" };
047.                        Console.WriteLine("配列の数は {0} です", data1.Length);
048. 
049.                        // *********************************
050.                        // 配列を文字列内に埋め込む
051.                        // *********************************
052.                        string sqlResult = String.Format(textData, data1);
053.                        Console.Write(sqlResult);
054. 
055.                        // *********************************
056.                        // 配列の準備(2)
057.                        // *********************************
058.                        string[] data2 = new string[4];
059.                        data2[0] = "0002";
060.                        data2[1] = "山田花子";
061.                        data2[2] = "20000";
062.                        data2[3] = "NULL";
063. 
064.                        // *********************************
065.                        // 配列を文字列内に埋め込む
066.                        // *********************************
067.                        sqlResult = String.Format(textData, data2);
068.                        Console.Write(sqlResult);
069. 
070.                        // *********************************
071.                        // 配列の準備(3)
072.                        // *********************************
073.                        string[] data3 = new string[4];
074.                        data3.SetValue("0003", 0);
075.                        data3.SetValue("山田美子", 1);
076.                        data3.SetValue("30000", 2);
077.                        data3.SetValue("'1980/01/01'", 3);
078. 
079.                        // *********************************
080.                        // 配列を文字列内に埋め込む
081.                        // *********************************
082.                        sqlResult = String.Format(textData, data3);
083.                        Console.Write(sqlResult);
084. 
085.                        // *********************************
086.                        // 配列の準備(4)
087.                        // *********************************
088.                        List<string> data4 = new List<string>();
089.                        data4.Add("0004");
090.                        data4.Add("山田史郎");
091.                        data4.Add("40000");
092.                        data4.Add("'1990/01/01'");
093. 
094.                        // *********************************
095.                        // 配列を文字列内に埋め込む
096.                        // *********************************
097.                        sqlResult = String.Format(textData, data4.ToArray());
098.                        Console.Write(sqlResult);
099. 
100.                        // *********************************
101.                        // 配列の準備(5)
102.                        // ※ 追加するデータ型自由
103.                        // *********************************
104.                        ArrayList data5 = new ArrayList();
105.                        data5.Add("0005");
106.                        data5.Add("山田吾郎");
107.                        data5.Add(50000);
108.                        data5.Add(new DateTime(1995, 1, 1));
109. 
110.                        // *********************************
111.                        // 配列を文字列内に埋め込む
112.                        // 混在なので object 配列
113.                        // *********************************
114.                        object[] strWork = data5.ToArray();
115.                        sqlResult = String.Format(textData, strWork[0], strWork[1], strWork[2], $"'{strWork[3]}'");
116.                        Console.Write(sqlResult);
117. 
118.                        Console.ReadLine();
119. 
120.                }
121. 
122.                private static string loadTextData(string filePath)
123.                {
124. 
125.                        string text = "";
126. 
127.                        // *********************************
128.                        // 主なエンコード
129.                        // *********************************
130.                        // SHIFT_JIS
131.                        // Encoding Enc = Encoding.GetEncoding(932);
132.                        // EUC-JP
133.                        //Encoding Enc = Encoding.GetEncoding(51932);
134.                        // UNICODE 用
135.                        //Encoding Enc = Encoding.GetEncoding(1200);
136.                        // UTF-8N
137.                        Encoding Enc = new UTF8Encoding();
138.                        // UTF-8
139.                        //Encoding Enc = new UTF8Encoding(true);
140. 
141.                        // プロック終了時に開放
142.                        try
143.                        {
144.                                using (StreamReader ReadFile = new StreamReader(filePath, Enc))
145.                                {
146.                                        // 読込み
147.                                        text = ReadFile.ReadToEnd();
148. 
149.                                        // 全て読み込んでいるので閉じる
150.                                        ReadFile.Close();
151. 
152.                                        Console.Write(text);
153.                                }
154. 
155.                        }
156.                        catch (Exception ex)
157.                        {
158.                                Console.WriteLine(ex.Message);
159.                        }
160. 
161.                        return text;
162. 
163.                }
164.        }
165.}

関連する記事

C# : シンプルなテキストファイルの一括入力 / ReadToEnd() : VS2017




C#