SQLの窓

2018年05月22日


PowerShell で C# のソースコード(get_rec_mysql.cs) を使用して System.Data.Odbc で MySQL のデータを一覧表示( csv )

▼ ps.bat : このバッチファイルがある場所にパスを通しています
@powershell -NoProfile -ExecutionPolicy Unrestricted "./%1.ps1"
PowerShell で System.Data.Odbc を使用して MySQL のデータを一覧表示( csv ) では、PowerShell の記述で処理しましたが、特異な環境や目的でも無いかぎり、C# のコードを直接使用したほうが、流用しやすくコストが安く済みます。 get_rec_mysql.cs は、一般的な using を使用した単純なデータベースの行の取得です。このコードを PowerShell で実行するには以下の3行で可能です。
Add-Type -path "get_rec_mysql.cs" `
	-ReferencedAssemblies System.Windows.Forms, System.Data
[Program]::Start()
get_rec_mysql.cs
using System;
using System.Data.Odbc;
using System.Windows.Forms;

public class Program
{
	public static void Start()
	{

		loadMySql();

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

		MessageBox.Show("処理が終了しました");

	}

	public static void loadMySql() {

		using (OdbcConnection myCon = new OdbcConnection())
		using (OdbcCommand myCommand = new OdbcCommand())
		{
			// 新しい OdbcConnectionStringBuilder オブジェクトを作成
			OdbcConnectionStringBuilder builder = new OdbcConnectionStringBuilder();

			// ドライバ文字列をセット ( 波型括弧{} は必要ありません )
			// 文字列を正確に取得するには、レジストリ : HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI
			builder.Driver = "MySQL ODBC 5.3 Unicode Driver";

			// 接続用のパラメータを追加
			builder.Add("SERVER", "localhost");
			builder.Add("DATABASE", "lightbox");
			builder.Add("UID", "root");
			builder.Add("PWD", "");

			// 内容を確認
			Console.WriteLine(builder.ConnectionString);

			myCon.ConnectionString = builder.ConnectionString;

			// *********************
			// 接続
			// *********************
			try
			{
				// 接続文字列を使用して接続
				myCon.Open();
				// コマンドオブジェクトに接続をセット
				myCommand.Connection = myCon;
				// コマンドを通常 SQL用に変更
				myCommand.CommandType = System.Data.CommandType.Text;
			}
			catch (Exception ex)
			{
				MessageBox.Show(ex.Message);
				return;
			}

			// *********************
			// 実行 SQL
			// *********************
			myCommand.CommandText = "select * from 社員マスタ";

			// *********************
			// レコードセット取得
			// *********************
			try 
			{
				using (OdbcDataReader myReader = myCommand.ExecuteReader())
				{
					string csv_format = "{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10}";
					string out_line = "";

					while( myReader.Read() ) {

						out_line = string.Format(csv_format,
							myReader.GetValue(0).ToString(),
							myReader.GetValue(1).ToString(),
							myReader.GetValue(2).ToString(),
							myReader.GetValue(3).ToString(),
							myReader.GetValue(4).ToString(),
							myReader.GetValue(5).ToString(),
							myReader.GetValue(6).ToString(),
							myReader.GetValue(7).ToString(),
							myReader.GetValue(8).ToString(),
							myReader.GetValue(9).ToString(),
							myReader.GetValue(10).ToString()
						);

						Console.WriteLine( out_line );

					}
					// リーダを使い終わったので閉じる
					myReader.Close();
				}
			}
			catch (Exception ex)
			{
				myCon.Close();
				MessageBox.Show(ex.Message);
				return;
			}

			// 接続解除
			myCon.Close();
 

		}
	}

}




【PowerShellの最新記事】
posted by lightbox at 2018-05-22 19:57 | PowerShell | このブログの読者になる | 更新情報をチェックする

表示しているサイトで Google 検索を実行するブックマークレット

site:ドメインの 検索を呼び出します

※ Google ヘルプ : ウェブ検索の精度を高める

最近は、セキュリティに厳密になったサイトが増えたので、そのページに埋め込む事ができなくなりつつあります。なので、windows.prompt で検索文字列を入力させて直接 Google を呼び出すようにしました。





このブログの記事単体ページで実行すると、以下のようになります
PowerShell site:logicalerror.seesaa.net/article
一番最後の /(スラッシュ) を取り去った状態で、その階層内の検索をする為のの文字列になります 表示しているサイトで Google 検索 ▼ リンク内コード
<a style='margin-left:60px;' href='javascript:var%20u=(document.URL).replace(/^http(s)?:\/\//g,"");var%20p=u.lastIndexOf("/");var%20u=u.substr(0,p);var%20a=prompt("検索文字列を入力してください","");if(a!=""&&a!=null){a=encodeURIComponent(a);a=a.replace("\u0025\u0032\u0030","+");a="https://www.google.co.jp/search?q="+a+"+site:"+u;window.open(a);}void(0);' onclick=" 
		alert('ブックマークバーまたは、お気に入りバーにドラッグドロップが簡単です'); 
		if (window.navigator.appName.toLowerCase().indexOf('microsoft') > -1) { 
			event.returnValue = false; 
		} 
		event.preventDefault(); 
		event.stopPropagation();
	">表示しているサイトで Google 検索</a>

▼ 実行内容を整理
// ********************************************
// 現在の URL から http:// または https:// を取り去ります
// ********************************************
va u = (document.URL).replace(/^http(s)?:\/\//g,"")

// ********************************************
// 最後の / の位置を取得します
// ********************************************
var p = u.lastIndexOf("/");

// ********************************************
// 元の文字列より、最後の / 以降を取り去ります
// ********************************************
var u = u.substr(0,p);

// ********************************************
// prompt で入力文字列を取得します
// ********************************************
var a = prompt("検索文字列を入力してください","");

// ********************************************
// 未入力時と、キャンセル時は何もしません
// ********************************************
if( a! = "" && a != null ) {
	// ********************************************
	// % エンコーディング
	// ********************************************
	a = encodeURIComponent(a);

	// ********************************************
	// encodeURIComponent では 空白は %20
	// 仕様に合わせて、空白は + 文字に変更
	// \u0025\u0032\u0030 は %20
	// ブックマークで %20 はスペースになるので
	// Unicode で指定
	// ********************************************
	a.replace("\u0025\u0032\u0030","+");

	// ********************************************
	// Google 用の検索用の URL を作成
	// ********************************************
	a = "https://www.google.co.jp/search?q="+a+"+site:"+u;

	// ********************************************
	// URL を開く
	// ********************************************
	window.open(a);
}

// ********************************************
// ※ お約束
// このブックマークレットでは必要無いですが
// ( 対話ウインドウが表示されるので )
// 通常はこれを最後に書いておくといいです
// ********************************************
void(0);



posted by lightbox at 2018-05-22 14:13 | ブックマークレット | このブログの読者になる | 更新情報をチェックする

2018年05月21日


PowerShell で System.Data.Odbc を使用して MySQL のデータを一覧表示( csv )

▼ ps.bat : このバッチファイルがある場所にパスを通しています
@powershell -NoProfile -ExecutionPolicy Unrestricted "./%1.ps1"
どう考えても、C# で書いたほうが一般的で使いやすい気もします( using したいし )が、一応 PowerShell だけで書いてみました。特に配列の扱いが分かりにくいので最初苦労しましたが、要素数の初期化が無さそうなので、0..10 として後から文字列をセットしています。 PowerShell を使用して、C# のコンソールアプリ用のソースコードから exe を作成する ▼ PowerShell ドキュメント about_Arrays( 配列 ) get_records.ps1
$connection = New-Object System.Data.Odbc.OdbcConnection
$command = New-Object System.Data.Odbc.OdbcCommand
$builder = New-Object System.Data.Odbc.OdbcConnectionStringBuilder

$builder.Driver = "MySQL ODBC 5.3 Unicode Driver"
 
# 接続用のパラメータを追加
$builder.Add("SERVER", "localhost");
$builder.Add("DATABASE", "lightbox");
$builder.Add("UID", "root");
$builder.Add("PWD", "");

# 内容表示( 接続文字列 )
$builder.ConnectionString

# 接続文字列設定
$connection.ConnectionString = $builder.ConnectionString

# *********************
# 接続
# *********************
try {
	# 接続文字列を使用して接続
	$connection.Open()
	# コマンドオブジェクトに接続をセット
	$command.Connection = $connection
	# コマンドを通常 SQL用に変更
	$command.CommandType = [System.Data.CommandType]::Text
}
catch [Exception] {
 
	$error[0] | Format-List * -force
	$connection.Close()

	$command.Dispose()
	$connection.Dispose()
	exit
 
}

# *********************
# 実行 SQL
# *********************
$command.CommandText = "select * from 社員マスタ"

# *********************
# レコードセット取得
# *********************
try {
	$reader = $command.ExecuteReader()
}
catch [Exception] {
 
	$error[0] | Format-List * -force
	$connection.Close()

	$command.Dispose()
	$connection.Dispose()
	exit
 
}

$out_format = "{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10}"

while($reader.Read()) {

	$array = 0..10
	for($idx=0; $idx -le 10; $idx++) {
		$array[$idx] = $reader.GetValue($idx).ToString()
	}

	$out_format -f 
		$array[0],
		$array[1],
		$array[2],
		$array[3],
		$array[4],
		$array[5],
		$array[6],
		$array[7],
		$array[8],
		$array[9],
		$array[10]

}

$reader.Close()

# 接続解除
$connection.Close()

# 解放
$reader.Dispose()
$command.Dispose()
$connection.Dispose()


関連する記事

Pleiades Oxygen 2 の XAMPP 内の MySQL を利用可能にしてテストデータ(販売管理)を登録する






posted by lightbox at 2018-05-21 22:50 | PowerShell | このブログの読者になる | 更新情報をチェックする
container 終わり


右サイド 終わり
base 終わり