SQLの窓

2020年01月21日


C# : インターネット上の JSON ファイルのフォーマットを クラスとして定義して1行でオブジェクト化して使用する

▼ NuGet パッケージマネージャコンソールより Json.NET をプロジェクト内にインストール
PM> Install-Package Newtonsoft.Json

'.NETFramework,Version=v4.6.1' を対象とするプロジェクト 'ConsoleApp-002' に関して、パッケージ 'Newtonsoft.Json.12.0.3' の依存関係情報の収集を試行しています
依存関係情報の収集に 17.23 ms かかりました
DependencyBehavior 'Lowest' でパッケージ 'Newtonsoft.Json.12.0.3' の依存関係の解決を試行しています
依存関係情報の解決に 0 ms かかりました
パッケージ 'Newtonsoft.Json.12.0.3' をインストールするアクションを解決しています
パッケージ 'Newtonsoft.Json.12.0.3' をインストールするアクションが解決されました
'nuget.org' からパッケージ 'Newtonsoft.Json 12.0.3' を取得しています。
  GET https://api.nuget.org/v3-flatcontainer/newtonsoft.json/12.0.3/newtonsoft.json.12.0.3.nupkg
  OK https://api.nuget.org/v3-flatcontainer/newtonsoft.json/12.0.3/newtonsoft.json.12.0.3.nupkg 5 ミリ秒
Newtonsoft.Json 12.0.3 をインストールしています。
パッケージ 'Newtonsoft.Json.12.0.3' をフォルダー 'D:\user\cs\cs20\ConsoleApp-002\packages' に追加しています
パッケージ 'Newtonsoft.Json.12.0.3' をフォルダー 'D:\user\cs\cs20\ConsoleApp-002\packages' に追加しました
パッケージ 'Newtonsoft.Json.12.0.3' を 'packages.config' に追加しました
'Newtonsoft.Json 12.0.3' が ConsoleApp-002 に正常にインストールされました
NuGet の操作の実行に 3.54 sec かかりました
経過した時間: 00:00:04.8406552
※ インストール後 Newtonsoft.Json は参照済で、packages フォルダが作成されてインストールされている。 Available NuGet Distribution Versions
using Newtonsoft.Json;
using System;
using System.Net;
using System.Text;

namespace ConsoleApp_002
{
	class Program
	{
		static void Main(string[] args)
		{
			string json_url = "https://lightbox.sakura.ne.jp/demo/template/basic/basic-html/project/basic-01.json";
			WebClient webClient = new WebClient();
			webClient.Encoding = Encoding.GetEncoding("utf-8");
			string json_text = webClient.DownloadString(json_url);

			Console.WriteLine(json_text);

			// JSON 文字列を一括でクラスのオブシェクトに変換
			MyJson data = JsonConvert.DeserializeObject<MyJson>(json_text);

			Console.WriteLine(data.title);
			Console.WriteLine(data.name);
			Console.WriteLine(data.image);
			Console.WriteLine(data.text);

			Console.ReadLine();
		}

		// ******************************************
		// 一括変換用のクラス
		// ******************************************
		private class MyJson
		{
			public string title { get; set; }
			public string name { get; set; }
			public string image { get; set; }
			public string text { get; set; }
		}
	}
}


このページの PDF



posted by lightbox at 2020-01-21 21:30 | VS(C#) | このブログの読者になる | 更新情報をチェックする

2020年01月20日


C# の文法的文字列処理

文字列補間 の $ はとても便利です。$@ で文章をそのまま解りやすく構築できると思います。

また、文字列補完では、空白文字を埋める機能と書式文字列を同時に使用する事ができます。
{<interpolationExpression>[,<alignment>][:<formatString>]}
※ めったに使う事はありませんが、文字列を[] で位置指定して文字( char ) を取得できます。
using System;
using System.IO;

namespace ConsoleApp_001
{
	class Program
	{
		static void Main(string[] args)
		{
			// 実行中ファイルのパス
			string dir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
			Console.WriteLine(dir);

			// 部分文字
			Console.WriteLine(dir[2].GetType());
			Console.WriteLine(dir[2]);

			// 逐語的リテラル文字列
string lines = @"
特殊文字を
直接表現
する方法
";
			Console.WriteLine(lines);

			// 文字列補間
			string lines_copy = $"{lines}";
			Console.WriteLine(lines);

			// 文字列補間 + 逐語的リテラル文字列
lines = $@"
{dir}
C:\user\cs\cs20\ConsoleApp-001
";
			Console.WriteLine(lines);

			// 文字列補間幅指定(指定文字数でどちらかに寄せる)
			string ok = "OK";
			string double_5 = $"|{ok,-5}|{ok,5}|";
			Console.WriteLine(double_5);

			// 文字列補間 カンマ編集
			int num = 1234567890;
			string yen = $"{num,20:#,#}";
			Console.WriteLine(yen);

			// 配列
			string[] abc = { "a", "b", "c" };
			foreach( string val in abc )
			{
				Console.WriteLine(val);
			}

			// 実行停止
			Console.ReadLine();
		}
	}
}


実行結果
D:\user\cs\cs20\ConsoleApp-001\ConsoleApp-001\bin\Debug
System.Char
\

特殊文字を
直接表現
する方法


特殊文字を
直接表現
する方法


D:\user\cs\cs20\ConsoleApp-001\ConsoleApp-001\bin\Debug
C:\user\cs\cs20\ConsoleApp-001

|OK   |   OK|
       1,234,567,890
a
b
c
このページの PDF
posted by lightbox at 2020-01-20 20:44 | VS(C#) | このブログの読者になる | 更新情報をチェックする

2019年12月29日


C# : Excel を データベースとして DataGridView に読み込む

syain.xlsx

※ Microsoft Office の Excel がインストールされている必要はありません

Microsoft.ACE.OLEDB.12.0 を使用して、OleDbConnection と OleDbCommand でデータベースとして処理します。テーブル名としては、シート名が使われますが、範囲指定して名前を定義しない限りは [シート名$] をテーブル名として使用します。( カギかっこは、Oracle で言うところのダブルクォートです )

※ ここでは : select * from [sheet1$]

Microsoft.ACE.OLEDB.12.0 がインストールされていない場合

Microsoft Access データベース エンジン 2010 再頒布可能コンポーネントをダウンロードしてインストールします。


( 32ビット版と64ビット版があるので選択してダウンロードします / ※ システム要件に 『32 ビット版の Access データベース エンジンは、Windows XP Service Pack 3 でしか使用できません』とあります。Windows7 では既にインストールされていると思われます )

▼ ダウンロードページの『インストール方法』より抜粋
OLEDB を使用するアプリケーション開発者: ConnectionString プロパティのプロバイダー引数を "Microsoft.ACE.OLEDB.12.0" に設定します。 

Microsoft Office Excel データに接続する場合は、Excel ファイル形式に基づいて OLEDB 接続文字列の適切な拡張プロパティを追加します 

ファイル形式 (拡張子)                                             拡張プロパティ
---------------------------------------------------------------------------------------------
Excel 97-2003 ブック (.xls)                                  "Excel 8.0"
Excel 2007-2010 ブック (.xlsx)                             "Excel 12.0 Xml"
Excel 2007-2010 マクロ有効ブック (.xlsm)      "Excel 12.0 Macro"
Excel 2007-2010 XML 以外のバイナリ ブック (.xlsb)      "Excel 12.0"
処理コード
using System;
using System.Data;
using System.Data.OleDb;
using System.Diagnostics;
using System.Windows.Forms;

namespace ExcelDataGridView
{
	public partial class FormExcelGridView : Form
	{

		private string path = null;

		public FormExcelGridView()
		{
			InitializeComponent();
		}

		private void loadExcelButton_Click(object sender, EventArgs e)
		{
			path = Helper.OpenFileDialog();
			if (path == null)
			{
				return;
			}

			LoadExcel();
		}

		// *********************
		// Excel の読み込み
		// *********************
		private void LoadExcel()
		{

			using (OleDbConnection myCon = new OleDbConnection())
			using (OleDbCommand myCommand = new OleDbCommand())
			{

				// SQL文字列格納用
				string myQuery = "select * from [sheet1$]";

				// 接続文字列の作成
				myCon.ConnectionString = string.Format($"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={path};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\"");
				Debug.WriteLine(myCon.ConnectionString);

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

				// *********************
				// 実行 SQL
				// *********************
				myCommand.CommandText = myQuery;

				// *********************
				// レコードセット取得
				// *********************
				try
				{
					using (OleDbDataReader myReader = myCommand.ExecuteReader())
					{

						DataTable dataTable = new DataTable();
						dataTable.Load(myReader);
						dataGridView.DataSource = dataTable;

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

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

			}   // 最外の using の終わり

			// カラム幅の自動調整
			dataGridView.AutoResizeColumns();

		}
	}
}



Helpre クラス



class Helper {

	// https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/application-object-excel
	public const int xlMaximized = -4137;
	public const int xlMinimized = -4140;
	public const int xlNormal = -4143;

	public static string OpenFileDialog() {

		OpenFileDialog ofd = new OpenFileDialog();

		ofd.Filter = "Excel(*.xls;*.xlsx;*.xlsm)|*.xls;*.xlsx;*.xlsm|すべてのファイル(*.*)|*.*";
		ofd.FilterIndex = 1;
		ofd.Title = "Excel ブックを選択してください";
		ofd.RestoreDirectory = true;

		if (ofd.ShowDialog() != DialogResult.OK) {
			return null;
		}

		return ofd.FileName;
	}
}


DataGridView のプロパティ



			// 
			// dataGridView
			// 
			this.dataGridView.AllowUserToAddRows = false;
			this.dataGridView.AllowUserToDeleteRows = false;
			this.dataGridView.AllowUserToOrderColumns = true;
			this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
			this.dataGridView.Location = new System.Drawing.Point(12, 67);
			this.dataGridView.MultiSelect = false;
			this.dataGridView.Name = "dataGridView";
			this.dataGridView.ReadOnly = true;
			this.dataGridView.RowTemplate.Height = 21;
			this.dataGridView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
			this.dataGridView.Size = new System.Drawing.Size(776, 371);
			this.dataGridView.TabIndex = 1;


関連する記事

C# : dynamic 型 による Excel へのアクセス

このページの PDF


posted by lightbox at 2019-12-29 00:12 | VS(C#) | このブログの読者になる | 更新情報をチェックする

2019年08月15日


C# : dynamic 型 による Excel へのアクセス

dynamic 型のオブジェクトは静的な型チェックをバイパスします。 なので、そのオブジェクトに対して熟練している必要がありますが、COM を使用する事を想定している場合、プログラマはそのメソッドに対して良く経験しているはすです。

▼ テンプレートのダウンロード


Excel の初期化部分と終了部分
// *********************
// 初期処理
// *********************
private void Form1_Load(object sender, EventArgs e) {

	excelApp = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application"));
	excelApp.Visible = true;

}

// *********************
// 終了処理
// *********************
private void Form1_FormClosed(object sender, FormClosedEventArgs e) {

	if (excelApp != null) {
		if (workBook != null) {
			// 保存した事にする
			workBook.Saved = true;
		}
		excelApp.Quit();
	}
	System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);

}
Excel.Application は、VBScript では CreateObject で使用する ID です。excelApp は、dynamic 型で定義されており、excelApp.Visible = true; は、Excel が表示される事を意味します。



本来は、非表示でなければなりませんが(ユーザが直接操作するとエラーが発生します)、アプリケーション側(C#)が完成せずにテスト段階でエラーを起こしてしまうと、Excel が終了せずにメモリに残ってしまうので(その場合はタスクマネージャより終了させる)、このようにしています。

実装している機能

Excel には気の遠くなるほど、機能がたくさんあります。その中でも基本となる部分を実装しました。
1) セルへの書き込み。

2) Book を開いて、シート名の一覧をコンボボックスに表示( アクティブシートを選択して先頭へスクロール )

3) 各 シートをアクティブにする( 先頭へスクロール )

4) Book を閉じる

5) Book を保存して閉じる

6) Window の最大化・標準表示
ソースコード
using System;
using System.Windows.Forms;

namespace ExcelBasic {
	public partial class Form1 : Form {

		// Excel アプリケーション
		private dynamic excelApp = null;
		// Excel ブック
		private dynamic workBook = null;
		// Excel のパス
		private string path = null;

		// *********************
		// コンストラクタ
		// *********************
		public Form1() {
			InitializeComponent();
		}

		// *********************
		// 書き込みテスト
		// *********************
		private void buttonTest_Click(object sender, EventArgs e) {

			// ブックを開いていない場合はなにもしない
			if (workBook == null) {
				return;
			}

			// セル用変数
			dynamic cell;
			// 行と列より、セルオブジェクト(アクティブシート)
			cell = workBook.ActiveSheet.Cells(numericRow.Value, numericColumn.Value);
			// セルに値をセット
			cell.Value = textString.Text;

		}

		// *********************
		// アクティブにする
		// *********************
		private void buttonActive_Click(object sender, EventArgs e) {

			// ブックを開いていない場合はなにもしない
			if (workBook == null) {
				return;
			}

			string sheetName = listBoxSheet.Text;
			// アクティブにする
			workBook.Sheets(sheetName).Activate();
			// 先頭へスクロール
			workBook.Sheets(sheetName).Range("A1").Select();

		}

		// *********************
		// 初期処理
		// *********************
		private void Form1_Load(object sender, EventArgs e) {

			// COM のロード
			excelApp = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application"));
			// 表示する
			excelApp.Visible = true;

		}

		// *********************
		// 終了処理
		// *********************
		private void Form1_FormClosed(object sender, FormClosedEventArgs e) {

			if ( excelApp != null) {
				if (workBook != null) {
					// 保存した事にする
					workBook.Saved = true;
				}
				excelApp.Quit();
			}
			System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);

		}

		// *********************
		// ブックを開く
		// *********************
		private void 開く_Click(object sender, EventArgs e) {

			if (workBook != null) {
				MessageBox.Show(this, "ブックは一つしか開く事ができません");
				return;
			}

			// Helper クラスでファイルを開く
			path = Helper.OpenFileDialog();
			if ( path != null ) {
				// Excel でブックを開く
				workBook = excelApp.Workbooks.Open(path);
				// リストボックス初期化
				listBoxSheet.Items.Clear();
				// シートの数によりループ
				for( int i = 1; i <= workBook.Sheets.Count; i++ ) {
					// シート名をリストボックスにセット
					listBoxSheet.Items.Add(workBook.Sheets(i).Name);
					// アクティブシートの場合
					if (workBook.ActiveSheet.Name == workBook.Sheets(i).Name)
					{
						// 選択して
						listBoxSheet.SelectedIndex = i-1;
						// 先頭へスクロール
						workBook.ActiveSheet.Range("A1").Select();
					}
				}
				// リストボックスを使用可能に
				listBoxSheet.Enabled = true;
			}

		}

		// *********************
		// 閉じる
		// *********************
		private void 閉じる_Click(object sender, EventArgs e) {

			closeExcel(1);

		}

		// *********************
		// 保存して閉じる
		// *********************
		private void 保存して閉じる_Click(object sender, EventArgs e) {

			closeExcel(2);
		}

		// *********************
		// Excel を閉じる
		// *********************
		private void closeExcel(int type)
		{
			if (workBook != null)
			{
				if (type == 1)
				{
					// 保存した事にする
					workBook.Saved = true;
				}
				if (type == 2)
				{
					// 保存
					workBook.Save();
				}
				workBook.Close();
				workBook = null;
			}

			// クリア
			listBoxSheet.Items.Clear();
			// リストボックスを使用不可にして
			listBoxSheet.Enabled = false;
			// 選択しない
			listBoxSheet.SelectedIndex = -1;
		}

		// *********************
		// 最大化
		// *********************
		private void 最大化_Click(object sender, EventArgs e) {

			excelApp.WindowState = Helper.xlMaximized;

		}

		// *********************
		// 標準
		// *********************
		private void 標準_Click(object sender, EventArgs e) {

			excelApp.WindowState = Helper.xlNormal;

		}

	}
}



Helpre クラス
using System.Windows.Forms;

namespace ExcelBasic {
	class Helper {

		// https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/application-object-excel
		public const int xlMaximized = -4137;
		public const int xlMinimized = -4140;
		public const int xlNormal = -4143;

		public static string OpenFileDialog() {

			OpenFileDialog ofd = new OpenFileDialog();

			ofd.Filter = "Excel(*.xls;*.xlsx;*.xlsm)|*.xls;*.xlsx;*.xlsm|すべてのファイル(*.*)|*.*";
			ofd.FilterIndex = 1;
			ofd.Title = "Excel ブックを選択してください";
			ofd.RestoreDirectory = true;

			if (ofd.ShowDialog() != DialogResult.OK) {
				return null;
			}

			return ofd.FileName;
		}
	}
}


関連する記事

C# : Excel を データベースとして DataGridView に読み込む



タグ:C# EXCEL
posted by lightbox at 2019-08-15 20:29 | VS(C#) | このブログの読者になる | 更新情報をチェックする

2019年08月12日


C# : フォームを表示せずに、通知領域にアイコンを表示させる常駐プログラム



Form を非表示にするには、Application.Run() にフォームのインスタンスを渡さずに実行します

using System;
using System.Windows.Forms;

namespace HideFormApp
{
	static class Program
	{
		/// <summary>
		/// アプリケーションのメイン エントリ ポイントです。
		/// </summary>
		[STAThread]
		static void Main()
		{
			Application.EnableVisualStyles();
			Application.SetCompatibleTextRenderingDefault(false);
			Form1 form = new Form1();
			Application.Run();
		}
	}
}


終了できるように、アイコンを用意してメニューを登録します


using System;
using System.ComponentModel;
using System.Drawing;
using System.Reflection;
using System.Windows.Forms;

namespace HideFormApp
{
	public partial class Form1 : Form
	{

		private ContextMenu contextMenu;
		private MenuItem menuItem;
		private NotifyIcon notifyIcon;

		public Form1()
		{
			InitializeComponent();
			initClass();
		}

		private void initClass()
		{
			contextMenu = new ContextMenu();
			menuItem = new MenuItem();

			contextMenu.MenuItems.Add(menuItem);
			menuItem.Text = "終了";
			// 終了処理
			menuItem.Click += (Object sender, EventArgs e) => {
				notifyIcon.Visible = false;
				notifyIcon.Dispose();
				// プログラム終了
				Application.Exit();

			};

			// NotifyIcon : 通知領域にアイコンを作成するコンポーネント
			notifyIcon = new NotifyIcon(new Container());
			notifyIcon.Icon = new Icon(@"Resources\Icon1.ico");
			notifyIcon.Text = "lightbox";
			notifyIcon.Visible = true;
			// メニューをセット
			notifyIcon.ContextMenu = contextMenu;
		}

	}
}


Resources\Icon1.ico は、実行ファイルのある場所にコピーしたものです



posted by lightbox at 2019-08-12 20:09 | VS(C#) | このブログの読者になる | 更新情報をチェックする

2019年06月24日


Microsoft Access に対してSQLを入力してその結果を DataGridView に表示する最も簡単なコード



最初に .accdb か .mdb を選択しておいて、自由な SQL をタイプしてその結果をそのまま Excel のごとく DataGridView に表示します。

DataGridView に表示するデータは全て文字列扱いとして、ArrayList に随時行を追加して、Rows.Add に、ToArray() したものをセットします。

一応表示のみを想定しているので、以下の設定を最初にします


表示件数は多すぎると時間がかかりすきるので、固定で 100 件にしています。
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WinApp1 {
	public partial class Form1 : Form {

		private OpenFileDialog ofd = new OpenFileDialog();

		public Form1() {
			InitializeComponent();
		}

		private void button1_Click(object sender, EventArgs e) {

			using (OleDbConnection myCon = new OleDbConnection())
			using (OleDbCommand myCommand = new OleDbCommand()) {

				// *********************
				// 接続文字列の作成
				// *********************
				myCon.ConnectionString = string.Format($"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={ofd.FileName};");
				Debug.WriteLine(myCon.ConnectionString);

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

				// *********************
				// 実行 SQL
				// *********************
				myCommand.CommandText = textBox1.Text;

				// *********************
				// レコードセット取得
				// *********************
				try {
					using (OleDbDataReader myReader = myCommand.ExecuteReader()) {

						// *********************
						// 列数
						// *********************
						int nCols = myReader.FieldCount;

						// DataGridView 初期化
						dataGridView1.Columns.Clear();
						dataGridView1.DataSource = null;
						dataGridView1.ColumnCount = nCols;		// カラム数

						Type fldType;
						ArrayList rowData = new ArrayList();

						// データ取得と表示
						int maxCount = 0;
						while (myReader.Read()) {

							// 行データをセットする ArrayList をクリア
							rowData.Clear();

							maxCount++;
							if ( maxCount > 100 ) {
								break;
							}

							// 初回のみ、タイトル文字列を設定
							if (maxCount == 1) {
								for (int idx = 0; idx < nCols; idx++) {
									dataGridView1.Columns[idx].Name = myReader.GetName(idx);
								}
							}

							// 行データの作成( ArrayList で作成して ToArray() したものを Rows.Add )
							for (int idx = 0; idx <nCols; idx++) {

								// NULL でない場合
								if (!myReader.IsDBNull(idx)) {
									// 列のデータ型を取得
									fldType = myReader.GetFieldType(idx);

									// 文字列
									if (fldType.Name == "String") {
										rowData.Add(myReader.GetValue(idx).ToString());
									}
									else if (fldType.Name == "Int32") {
										rowData.Add(myReader.GetInt32(idx).ToString());
									}
									else if (fldType.Name == "DateTime") {
										rowData.Add(myReader.GetDateTime(idx).ToString());
									}
									else {
										rowData.Add(myReader.GetValue(idx).ToString());
									}

								}
								else {
									rowData.Add("");
								}
							}

							// 行追加
							dataGridView1.Rows.Add(rowData.ToArray());

						}

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

				myCon.Close();

				// カラム幅の自動調整
				dataGridView1.AutoResizeColumns();

			}		// 最外の using の終わり

		}

		private void button2_Click(object sender, EventArgs e) {

			// *********************
			// ファイル選択
			// *********************
			ofd.Filter = "Excel(*.mdb;*.accdb)|*.mdb;*.accdb|すべてのファイル(*.*)|*.*";
			ofd.FilterIndex = 1;
			ofd.Title = "Access データベースを選択してください";
			ofd.RestoreDirectory = true;

			if (ofd.ShowDialog() != DialogResult.OK) {
				return;
			}


		}		// click イベントの終わり

	}		// class の終わり
}


※ テーブル・ビュー一覧は以下のようにして簡単に表示できます
using (OleDbConnection myCon = new OleDbConnection())
using (OleDbCommand myCommand = new OleDbCommand()) {

	// *********************
	// 接続文字列の作成
	// *********************
	myCon.ConnectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};", ofd.FileName);
	Debug.WriteLine(myCon.ConnectionString);

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

	DataTable dataTable = myCon.GetOleDbSchemaTable(
		OleDbSchemaGuid.Tables,
		new object[] { null, null, null, null }
	);
	// TABLE のみの場合は以下( 上記は 全て )
	//	new object[] { null, null, null, "TABLE" }

	dataGridView1.Columns.Clear();
	dataGridView1.DataSource = dataTable;

	myCon.Close();

	// カラム幅の自動調整
	dataGridView1.AutoResizeColumns();

}		// 最外の using の終わり

さらに SQL の実行結果は、データの途中加工が全くできなくなりますが、DataTable を使って以下のようにさらに短く記述する事ができます
// *********************
// 実行 SQL
// *********************
myCommand.CommandText = textBox1.Text;

try
{
	using (OleDbDataReader myReader = myCommand.ExecuteReader())
	{
		DataTable dataTable = new DataTable();

		dataTable.Load(myReader);

		dataGridView1.Columns.Clear();
		dataGridView1.DataSource = dataTable;

		myReader.Close();
	}

}
catch (Exception ex)
{
	myCon.Close();
	MessageBox.Show(this, ex.Message);
	return;
}

DataSource プロパティを使用した場合、新たに直接データをセットしていきたい場合は、いったん DataSource プロパティに null を設定しておく必要があります。


Microsoft.ACE.OLEDB.12.0 がインストールされていない場合

Microsoft Access データベース エンジン 2010 再頒布可能コンポーネントをダウンロードしてインストールします。


( 32ビット版と64ビット版があるので選択してダウンロードします )




posted by lightbox at 2019-06-24 19:53 | VS(C#) | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



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

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり