連載:Windowsフォーム開発入門【Visual Studio 2010対応】

リモート・データ活用術〜SQL Server編〜

初音 玲
2011/02/09

 本稿では、Visual Studio 2010で「WinFormSQL」(VBの場合。C#の場合は「WinFormSQLCs」)という名前でWindowsフォーム・アプリケーションのプロジェクトを作成している。

 本稿ではすべてのコードは説明しないので、(必要があれば)下記のリンクからサンプル・コードをダウンロードして参照してほしい。

画面遷移を考える

 それではまず、アプリケーションの画面遷移(例:起動→ログイン→作業画面などの流れ)を考えよう。

 サンプルの画面遷移は次のように設計した。

図11 画面遷移

 プログラムを起動すると、スプラッシュ・スクリーンが自動的に表示され、それからメイン画面であるタイトル一覧画面を表示する。

 タイトル一覧画面が表示されると、同時にログイン画面が表示され、(そのログイン画面で)SQL Serverへのログインが成功した場合だけ、タイトル一覧画面を使えるようにする。

 タイトル一覧画面では、編集したいタイトルを一覧から選択すると編集画面が開き、該当タイトルの情報を編集できる。

 以下では、サンプル・アプリケーションの各画面を作成していく。

 なお、C#ではいくつかのテンプレート(「スプラッシュ スクリーン」や「ログイン フォーム」など)が標準で用意されていない。本連載の第2回でこれらのC#向けのひな型コードを提供しているので、C#を使う場合はそのコードをダウンロードして活用してほしい。

スプラッシュ・スクリーンを作成

 スプラッシュ・スクリーン(図12)は、VB(Visual Basic)であれば「スプラッシュ スクリーン」テンプレートが用意されているが、C#にはテンプレートが用意されていない。本連載の第2回でC#でもスプラッシュ・スクリーンを実現しているので、そのとき作ったものを([ソリューション エクスプローラー]のプロジェクト項目の右クリック・メニューから表示できる)[既存項目の追加]ダイアログでプロジェクトに追加して利用する。

図12 スプラッシュ・スクリーンのUIデザイン

 スプラッシュ・スクリーンの表示は、VBならばプロジェクトのプロパティで設定できるが、C#の場合はMicrosoft.VisualBasicアセンブリを([ソリューション エクスプローラー]で)[参照設定]に追加してから、Program.csファイルを次のように書き換える。

using System;
using System.Windows.Forms;
using Microsoft.VisualBasic.ApplicationServices;

namespace WinFormSQLCs
{
  internal class Program : WindowsFormsApplicationBase
  {
    [STAThread]
    static void Main(string[] args)
    {
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      new Program().Run(args);
    }

    protected override void OnCreateMainForm()
    {
      this.MainForm = new WinFormSQL_Form();
    }
    protected override void OnCreateSplashScreen()
    {
      this.SplashScreen = new SplashScreen_Form();
    }
  }
}
リスト1 スプラッシュ・スクリーンを起動するコード例(C#)

ログイン画面を作成

 ログイン画面(図13)もVBでは「ログイン フォーム」テンプレートが用意されているので、それを活用する。このテンプレートの内容については、本連載の第2回を参照してほしい。こちらもC#では用意されていない。

図13 ログイン画面のUIデザイン

 ログイン画面では、入力されたIDとパスワードを使ってSQL Serverにログインを行い、その結果を判定する。SQL Serverとの接続はSystem.Data.SqlClient名前空間のクラスを使用する。具体的には、下記のようなコードになる。

Imports System.Data.SqlClient

Public Class Login_Form
  Property UserID As String
  Property Password As String

  Private Sub OK_Click(ByVal sender As System.Object,
                       ByVal e As System.EventArgs) Handles OK.Click
    Using _cn As New SqlConnection
      Try
        _cn.ConnectionString = String.Format(My.Settings.ConnectonString,
                                             Me.UsernameTextBox.Text,
                                             Me.PasswordTextBox.Text)
        _cn.Open()
        UserID = Me.UsernameTextBox.Text
        Password = Me.PasswordTextBox.Text
        Me.DialogResult = DialogResult.OK
      Catch ex As Exception
        MessageBox.Show(ex.Message, Me.Text)
      End Try
    End Using
  End Sub
End Class
using System;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WinFormSQLCs
{
  public partial class Login_Form : Form
  {
    public Login_Form()
    {
      InitializeComponent();
    }

    public String UserID { get; set; }
    public String Password { get; set; }

    private void OK_Button_Click(object sender, EventArgs e)
    {
      using (SqlConnection _cn = new SqlConnection())
      {
        try
        {
          _cn.ConnectionString = String.Format(WinFormSQLCs.Properties.Settings.Default.ConnectonString,
                                               this.UsernameTextBox.Text,
                                               this.PasswordTextBox.Text);
          _cn.Open();
          UserID = this.UsernameTextBox.Text;
          Password = this.PasswordTextBox.Text;
          this.DialogResult = System.Windows.Forms.DialogResult.OK;
          this.Close();
        }
        catch (Exception ex)
        {
          MessageBox.Show(ex.Message, this.Text);
        }
      }
    }
  }
}
リスト2 SQL Serverへログインするコード例(上:VB、下:C#)

 ログイン画面のフォーム・クラスには、UserIDとPasswordという2つのPublicプロパティを記述している。この2つのプロパティには、SQL Serverへのログインが成功したときに使用したIDとパスワードを設定する。ログイン画面の呼び出し元では、この2つのプロパティから値を取得して、以降のSQL Serverデータベースの処理で利用する。

 SQL Server用の接続文字列はApp.configファイルに次のように指定している。

Data Source=localhost\SQLEXPRESS;Initial Catalog=pubs;User ID={0};Password={1}

 もしリモートのSQL Serverに接続したいときは、「Data Source」に設定している「localhost」の記述をSQL Serverが稼働しているマシン名に変更してほしい。

 続いて、次のページではタイトル一覧画面を作成する。


 INDEX
  [連載]Windowsフォーム開発入門【Visual Studio 2010対応】
  リモート・データ活用術〜SQL Server編〜
    1.SQL Server Expressの設定
  2.画面遷移/スプラッシュ・スクリーン/ログイン画面
    3.タイトル一覧画面(メイン画面)
    4.編集画面(ダイアログ画面)
    5.最終仕上げ

インデックス・ページヘ  「Windowsフォーム開発入門」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH