Visual Studio の初心者向けデモ (Silverlight 編)

初心者用のセミナーなどでは Visual Studio の開発生産性を示すデモがよく行われます。
Windows フォーム編WPF 編に引き続き、
Silverlight 上のグリッドを特定のテーブルにバインドさせるだけの簡単なサンプルを作成する手順について記述します。
Northwind データベースの Products テーブルを対象とします。
Windows フォームとは違って、データの保存はできません。
  1. Visual Studio を起動する。
  2. (1) [ファイル] – [新規作成] – [プロジェクト] をクリックし、
         テンプレートから [Silverlight アプリケーション] を選択して [OK] をクリックする。
    (2) [WCF RIA サービスを有効にする] チェック ボックスをオンにし、[OK] をクリックする。
      → ソリューションおよびプロジェクトが作成される。
  3. (1) [プロジェクト] – [新しい項目の追加] をクリックし、
         テンプレートから [ADO.NET Entity Data Model] を選択して [追加] をクリックする。
    (2) [次へ] をクリックする。
    (3) [新しい接続] をクリックする。
    (4) [localhost\SQLEXPRESS] サーバーの [Northwind] データベースを選択して [OK] をクリックする。
    (5) [次へ] をクリックする。
    (6) [Products] テーブルを選択し、[生成されたオブジェクトの名前を複数化または単数化する] チェック ボックスを
         オンにして [完了] をクリックする。
      → SilverlightApplication1.Web プロジェクトに Model1.edmx が作成される。
  4. [ビルド] – [ソリューションのビルド] をクリックする。
  5. (1) [プロジェクト] – [新しい項目の追加] をクリックし、テンプレートから [Domain Service Class] を選択して [追加] をクリックする。
    (2) [Product] の [Enable editing] チェック ボックスをオンにして [OK] をクリックする。
      → SilverlightApplication1.Web プロジェクトに DomainService1.cs が作成される。
  6. MainPage.xaml を表示させ、[データ] – [データ ソースの表示] をクリックする。
      → [データ ソース] ウィンドウが表示される。
  7. [データ ソース] ウィンドウの [Product] を MainPage.xaml にドラッグ アンド ドロップする。
      → DataGrid が配置される。
  8. productDataGrid を右クリックし、[レイアウトのリセット] – [すべて] をクリックする。
      → productDataGrid の領域が最大限に広がる。

  9. [デバッグ] – [デバッグなしで開始] をクリックする。
      → 作成されたアプリケーションが起動する。

 
バージョン情報
Silverlight 4
.NET Framework 4
Visual Studio 2010 + Silverlight 4 Tools
 
参照

Visual Studio の初心者向けデモ (WPF 編)

初心者用のセミナーなどでは Visual Studio の開発生産性を示すデモがよく行われます。
Windows フォーム編に引き続き、
WPF 上のグリッドを特定のテーブルにバインドさせるだけの簡単なサンプルを作成する手順について記述します。
Northwind データベースの Products テーブルを対象とします。
Windows フォームとは違って、データの保存はできません。
  1. Visual Studio を起動する。
  2. [ファイル] – [新規作成] – [プロジェクト] をクリックし、
    テンプレートから [WPF アプリケーション] を選択して [OK] をクリックする。
      → ソリューションおよびプロジェクトが作成される。
  3. [データ] – [データ ソースの表示] をクリックする。
      → [データ ソース] ウィンドウが表示される。
  4. (1) [データ] – [新しいデータ ソースの追加] をクリックする。
    (2) [次へ] をクリックする。
    (3) [次へ] をクリックする。
    (4) [新しい接続] をクリックする。
    (5) [localhost\SQLEXPRESS] サーバーの [Northwind] データベースを選択して [OK] をクリックする。
    (6) [次へ] をクリックする。
    (7) [次へ] をクリックする。
    (8) [Products] テーブルを選択して [完了] をクリックする。
      → [データ ソース] ウィンドウに [Products] テーブルが作成される。
  5. [データ ソース] ウィンドウの [Products] テーブルを MainWindow にドラッグ アンド ドロップする。
      → DataGrid が配置される。
  6. productsDataGrid を右クリックし、[レイアウトのリセット] – [すべて] をクリックする。
      → productsDataGrid の領域が最大限に広がる。

  7. [デバッグ] – [デバッグなしで開始] をクリックする。
      → 作成されたアプリケーションが起動する。

 
バージョン情報
.NET Framework 4
Visual Studio 2010
 
参照

Visual Studio の初心者向けデモ (Windows フォーム編)

初心者用のセミナーなどでは Visual Studio の開発生産性を示すデモがよく行われます。
今回は、Windows フォーム上のグリッドを特定のテーブルにバインドさせるだけの
簡単なサンプルを作成する手順について記述します。
Northwind データベースの Products テーブルを対象とします。
  1. Visual Studio を起動する。
  2. [ファイル] – [新規作成] – [プロジェクト] をクリックし、
    テンプレートから [Windows フォーム アプリケーション] を選択して [OK] をクリックする。
      → ソリューションおよびプロジェクトが作成される。
  3. [データ] – [データ ソースの表示] をクリックする。
      → [データ ソース] ウィンドウが表示される。
  4. (1) [データ] – [新しいデータ ソースの追加] をクリックする。
    (2) [次へ] をクリックする。
    (3) [新しい接続] をクリックする。
    (4) [localhost\SQLEXPRESS] サーバーの [Northwind] データベースを選択して [OK] をクリックする。
    (5) [次へ] をクリックする。
    (6) [次へ] をクリックする。
    (7) [Products] テーブルを選択して [完了] をクリックする。
      → [データ ソース] ウィンドウに [Products] テーブルが作成される。
  5. [データ ソース] ウィンドウの [Products] テーブルを Form1 にドラッグ アンド ドロップする。
      → DataGridView などが配置される。
  6. productsDataGridView の右上の矢印をクリックし、[親コンテナにドッキングする] をクリックする。
      → productsDataGridView の領域が最大限に広がる。

  7. [デバッグ] – [デバッグなしで開始] をクリックする。
      → 作成されたアプリケーションが起動する。
          行の編集、追加、削除、および保存が可能。

 
バージョン情報
.NET Framework 2.0, 3.0, 3.5, 4
Visual Studio 2005, 2008, 2010
 
参照

.NET におけるバーコード リーダーの利用

最近 .NET でバーコード リーダーからの入力を受け取る方法について調べる機会があったので載せておきます。
ただし、実機では検証していません。
 
まず、バーコード リーダーには大きく分けて次の 2 種類のものが存在します。
 
  • シリアルポート インターフェイス (RS-232C)
  • キーボード インターフェイス
近年ではキーボード インターフェイスのものが増えてきているようです。
それぞれの場合にバーコード リーダーからの入力を受け取る方法は以下のようになります。
なお、製品によっては専用の API が用意されているかもしれません。
 
(1) シリアルポート インターフェイスを利用する場合
 
System.IO.Ports.SerialPort クラスを利用します。
具体的には、SerialPort オブジェクトの DataReceived イベントを待機し、イベントが発生したら Read 系メソッドでデータを読み込みます。
 
(2) キーボード インターフェイスを利用する場合
 
バーコード リーダーからの入力はキーボードからの入力に置き換えられます。
従って、Control.KeyDown イベントUIElement.KeyDown イベントを利用します。このイベントは 1 文字ごとに発生します。
 
またこの場合、キーボードから入力されたのか、それともバーコード リーダーから入力されたのかを判断するのは容易ではありません。
考えられるのは、バーコード リーダーによる入力は一瞬で終了するはずなので、タイムアウトを決めておいて作り込むという方法です。
入力内容の妥当性については、例えば次のように判断します。
 
  • 入力内容が "*9999*\r\n" のように記号や改行コードを含んでいれば、それらが存在するかどうかをチェックする。
  • 入力の桁数が固定されていれば、桁数をチェックする。
バージョン情報
.NET Framework 2.0, 3.0, 3.5, 4
 
参照
バーコード リーダー関連
 
シリアルポート インターフェイス関連
 
キーボード インターフェイス関連

LIKE で検索するときの文字のエスケープ (SQL Server)

LIKE 演算子を使用して部分一致検索などを行う場合、パーセント記号 (%) およびアンダースコア (_) をワイルドカードとして利用できますが、
例えば "10%" や "(^_^)/" をキーワードとして検索するときなど、
検索キーワード自体にワイルドカードが含まれているときにはこれらをリテラルとして扱うためにエスケープしなければなりません。

Transact-SQL では、検索キーワードのエスケープは次の方針に従います。

  • = 演算子または <> 演算子を使用する場合、いずれの文字もエスケープしない。
  • LIKE 演算子を使用する場合、パーセント記号 (%)、アンダースコア (_) および左角かっこ ([) を 2 つの角かっこ ([ ]) で囲む。

つまり、LIKE 演算子を使用する場合に限り、次の置換が必要ということです。

  • % → [%]
  • _ → [_]
  • [ → [[]

単純に String.Replace メソッドを利用すれば、次のように記述できます。

string newText = text.Replace("[", "[[]").Replace("%", "[%]").Replace("_", "[_]");

正規表現を利用すれば、次のように記述できます。

string newText = Regex.Replace(text, @"[%_\[]", "[$0]");

第 3 引数の中の $0 は、第 2 引数のパターンに一致したものの全体を表します。
これは、Regex.Matches メソッドにより返される各 Match オブジェクトの Groups[0] に相当するものです。

具体例を以下に示します。


// 商品名に対する部分一致検索をします。
public static void FillProductByLikeName(AdventureWorksDataSet.ProductDataTable dataTable, string name)
{
    if (name == null)
    {
        throw new ArgumentNullException("name");
    }
 
    using (var ta = new ProductTableAdapter())
    {
        // ProductTableAdapter.FillByLikeName メソッドは次の SQL から自動生成したメソッドです。
        // SELECT * FROM Product WHERE Name LIKE @Name
        ta.FillByLikeName(dataTable, AppendWildcard(EscapeForLike(name)));
    }
}
 
private static string AppendWildcard(string text)
{
    return string.Format("%{0}%", text);
}
 
private static string EscapeForLike(string text)
{
    return Regex.Replace(text, @"[%_\[]", "[$0]");
}

バージョン情報
.NET Framework 2.0, 3.0, 3.5, 4
SQL Server 2005, 2008, 2008 R2

参照
LIKE (Transact-SQL)
置換
Regex.Replace メソッド