SQLの窓

2014年07月30日


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

基本的には、String.Format メソッドのお話ですが、文字列の配列の扱いとの関係での注意事項です。
-- ******************************
-- 社員マスタ更新
-- ******************************

UPDATE 社員マスタ
set 
	氏名 = '{1}',
	給与 = {2},
-- 行コメント
	生年月日 = {3}

where 社員コード = '{0}'

-- 行コメント

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

VB.net による記述
Imports System.IO
Imports System.Text

Module Module1

	Sub Main()

		' 入力ファイルのパス ( "入力ファイルのパス" と指定する )
		Dim arguments As String() = Environment.GetCommandLineArgs()
		' 引数は一つのみ許可
		If arguments.Length <> 2 Then
			Console.WriteLine("引数を指定して下さい")
			Return
		End If

		' 引数から取得
		Dim BaseFilePath As String = arguments(1)

		' *********************************
		' 主なエンコード
		' *********************************
		' SHIFT_JIS
		Dim SJIS_Enc As Encoding = Encoding.GetEncoding(932)
		' EUC-JP
		Dim UJIS_Enc As Encoding = Encoding.GetEncoding(51932)
		' UNICODE 用
		Dim UNI_Enc As Encoding = Encoding.GetEncoding(1200)
		' UTF-8N
		Dim UTF8N_Enc As New UTF8Encoding()
		' UTF-8
		Dim UTF8_Enc As New UTF8Encoding(True)

		' *********************************
		' UTF-8N で読込み
		' *********************************
		' 読み込み用
		Dim ReadFile As StreamReader = New StreamReader(BaseFilePath, UTF8N_Enc)

		' 読込み
		Dim SqlText As String = ReadFile.ReadToEnd()
		Dim SqlWork As String = SqlText
		Dim SqlResult As String = Nothing

		' 全て読み込んでいるので閉じて解放
		ReadFile.Close()
		ReadFile.Dispose()

		' 行コメントの削除
		SqlWork = RegularExpressions.Regex.Replace( _
		 SqlWork, "([^\n-]*)--[^\n]*\n", "$1" _
		)

		' 改行が入っているので Write
		Console.Write(SqlWork)

		Dim rpl As String() = {"0001", "山田太郎", "100000", "'1980/01/01'"}
		Console.WriteLine("配列の数は {0} です", rpl.Length)

		Console.WriteLine("値を String.Format でセットします")
		SqlResult = String.Format(SqlWork, rpl)
		Console.Write(SqlResult)

		rpl(0) = "0002"
		rpl(1) = "山田花子"
		rpl(2) = "20000"
		rpl(3) = "NULL"
		SqlResult = String.Format(SqlWork, rpl)
		Console.Write(SqlResult)
		Console.WriteLine()

		rpl(0) = "0003"
		rpl(1) = "山田美子"
		rpl(2) = "20000"
		rpl(3) = "'1980/01/01'"
		SqlResult = String.Format(SqlWork, rpl)
		Console.Write(SqlResult)

		' *********************************
		' 終了処理
		' *********************************
		Console.WriteLine("処理が終了しました")

		' 一時停止
		Console.Write("Enterキーを押して下さい : ")
		Console.ReadLine()

	End Sub

End Module


C# による記述
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace StringFormat
{
	class Program
	{
		static void Main(string[] args)
		{
			// 入力ファイルのパス ( "入力ファイルのパス" と指定する )
			string[] arguments = Environment.GetCommandLineArgs();
			// 引数は一つのみ許可
			if ( arguments.Length != 2 ) {
				Console.WriteLine("引数を指定して下さい");
				return;
			}

			// 引数から取得
			string BaseFilePath = arguments[1];

			// *********************************
			// 主なエンコード
			// *********************************
			// SHIFT_JIS
			Encoding SJIS_Enc = Encoding.GetEncoding(932);
			// EUC-JP
			Encoding UJIS_Enc = Encoding.GetEncoding(51932);
			// UNICODE 用
			Encoding UNI_Enc = Encoding.GetEncoding(1200);
			// UTF-8N
			Encoding UTF8N_Enc = new UTF8Encoding();
			// UTF-8
			Encoding UTF8_Enc = new UTF8Encoding(true);

			// *********************************
			// UTF-8N で読込み
			// *********************************
			// 読み込み用
			StreamReader ReadFile = new StreamReader(BaseFilePath, UTF8N_Enc);

			// 読込み
			string SqlText = ReadFile.ReadToEnd();
			string SqlWork = SqlText;
			string SqlResult = null;

			// 全て読み込んでいるので閉じて解放
			ReadFile.Close();
			ReadFile.Dispose();

			// 行コメントの削除
			SqlWork = System.Text.RegularExpressions.Regex.Replace( 
				SqlWork, "([^\n-]*)--[^\n]*\n", "$1"
			);

			// 改行が入っているので Write
			Console.Write(SqlWork);

			string[] rpl = {"0001", "山田太郎", "100000", "'1980/01/01'"};
			Console.WriteLine("配列の数は {0} です", rpl.Length);

			Console.WriteLine("値を String.Format でセットします");
			SqlResult = String.Format(SqlWork, rpl);
			Console.Write(SqlResult);

			rpl[0] = "0002";
			rpl[1] = "山田花子";
			rpl[2] = "20000";
			rpl[3] = "NULL";
			SqlResult = String.Format(SqlWork, rpl);
			Console.Write(SqlResult);
			Console.WriteLine();

			rpl[0]= "0003";
			rpl[1] = "山田美子";
			rpl[2] = "20000";
			rpl[3] = "'1980/01/01'";
			SqlResult = String.Format(SqlWork, rpl);
			Console.Write(SqlResult);

			// *********************************
			// 終了処理
			// *********************************
			Console.WriteLine("処理が終了しました");

			// 一時停止
			Console.Write("Enterキーを押して下さい : ");
			Console.ReadLine();

		}
	}
}

引数は、プロジェクトのプロパティからデバッグタブを開けて設定します。





posted by lightbox at 2014-07-30 12:31 | VB.NET : ベーシック | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり