C#で.NET Data Providerを使用し、Symfowareへ接続する

随分前に、Visual C# 2008 Express Editionを使用して、C#からSymfowareへ
データの登録や検索を行ってみました。

Visual C# 2008 Express Edition から .NET Data Providerを使用して接続する
※この時は、Symfoware V10


Symfoware V11をインストールしたので、復習してみます。


なお、事前準備は、
Windows Server 2012にSymfoware V11をインストールする
Symfoware V11 Client(ODBCドライバ等)のインストール
Windows Server 2012でSymfowareの通信ポートを解放する

登録や検索に使用するテーブルは、
Symfoware V11へデータベースの作成と黒猫 SQL Studio Nextからの接続



csc.exeでC#プログラムのコンパイル



開発環境を入れるのが面倒だったので、.NET Frameworkに同梱されている
csc.exeを利用してC#のプログラムをコンパイルしてみます。

csc.exeを使用してのプログラム解説はこちら。
C# バッチファイルでソースをコンパイルする





接続のサンプル



接続文字列に使用するキーワードは以下のとおり。


Data Source = (データベースサーバー名)
Port = (ポート)
User ID = (ユーザーID)
Password = (パスワード)
Initial Catalog = (データベース名)



上記をセミコロンで区切って結合します。


サーバーに接続するサンプルは、こんな感じになります。


  1. using System;
  2. using System.Text;
  3. using Fujitsu.Symfoware.Client;
  4. public class Sample {
  5.     
  6.     [STAThread]
  7.     public static void Main(string[] args) {
  8.         
  9.         StringBuilder sb = new StringBuilder();
  10.         //サーバー
  11.         sb.Append("DATA SOURCE=192.168.1.6;");
  12.         //ポート
  13.         sb.Append("PORT=2050;");
  14.         //データベース名
  15.         sb.Append("INITIAL CATALOG=SAMPLE;");
  16.         //接続ユーザー名
  17.         sb.Append("USER ID=Administrator;");
  18.         //パスワード
  19.         sb.Append("PASSWORD=P@ssw0rd");
  20.         
  21.         using (SymfowareConnection con = new SymfowareConnection(sb.ToString())) {
  22.             // コネクションオープン
  23.             con.Open();
  24.             
  25.             Console.WriteLine("接続成功");
  26.         }
  27.         
  28.     }
  29. }




このソースをビルドするためのバッチファイルですが、まず失敗例。


@echo off
set csc=C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe
set opt=/nologo
%csc% %opt% Sample.cs



実行すると、こんなエラーが表示されると思います。


error CS0246: 型または名前空間名 'Fujitsu'が見つかりませんでした。
usingディレクティブまたはアセンブリ参照が不足しています。




.NET Framework標準でないライブラリを使用する場合は、ビルド時にそのdllの
場所を明示してやる必要があるみたいです。

Fujitsu.Symfoware.Client名前空間の解決に必要なdllは
Symfowareクライアントをインストールしたパス、デフォルトで「C:\SFWCLNT\」の
SNDP\BIN\4.0\Fujitsu.Symfoware.dllになります。

私はインストールパスを変えたので、
「C:\Symfoware\SFWCLNT\SNDP\BIN\4.0\Fujitsu.Symfoware.dll」
になりますが、このパスを/r:オプションで指定してやります。


@echo off
set csc=C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe
set opt=/nologo /r:C:\Symfoware\SFWCLNT\SNDP\BIN\4.0\Fujitsu.Symfoware.dll
%csc% %opt% Sample.cs




これでビルドが通るようになったと思います。
実行してみると、データベースへの接続が確認できるかと思います。

167_01.png







登録のサンプル



データ登録のサンプルはこんな感じ。


  1. using System;
  2. using System.Text;
  3. using Fujitsu.Symfoware.Client;
  4. public class Sample {
  5.     
  6.     [STAThread]
  7.     public static void Main(string[] args) {
  8.         
  9.         StringBuilder sb = new StringBuilder();
  10.         //サーバー
  11.         sb.Append("DATA SOURCE=192.168.1.6;");
  12.         //ポート
  13.         sb.Append("PORT=2050;");
  14.         //データベース名
  15.         sb.Append("INITIAL CATALOG=SAMPLE;");
  16.         //接続ユーザー名
  17.         sb.Append("USER ID=Administrator;");
  18.         //パスワード
  19.         sb.Append("PASSWORD=P@ssw0rd");
  20.         
  21.         using (SymfowareConnection con = new SymfowareConnection(sb.ToString()))
  22.         using (SymfowareCommand cmd = new SymfowareCommand()) {
  23.             // コネクションオープン
  24.             con.Open();
  25.             
  26.             Console.WriteLine("接続成功");
  27.             
  28.             StringBuilder query = new StringBuilder();
  29.             query.Append("INSERT INTO SC_POST.POST_CODE (");
  30.             query.Append(" 郵便番号, 住所");
  31.             query.Append(" ) VALUES (");
  32.             query.Append(" '1234567','テストデータ'");
  33.             query.Append(")");
  34.             
  35.             cmd.Connection = con;
  36.             cmd.CommandText = query.ToString();
  37.             
  38.             //インサート文実行
  39.             cmd.ExecuteNonQuery();
  40.         }
  41.         
  42.     }
  43. }







検索のサンプル



先ほど登録したデータを検索してみます。


  1. using System;
  2. using System.Text;
  3. using Fujitsu.Symfoware.Client;
  4. public class Sample {
  5.     
  6.     [STAThread]
  7.     public static void Main(string[] args) {
  8.         
  9.         StringBuilder sb = new StringBuilder();
  10.         //サーバー
  11.         sb.Append("DATA SOURCE=192.168.1.6;");
  12.         //ポート
  13.         sb.Append("PORT=2050;");
  14.         //データベース名
  15.         sb.Append("INITIAL CATALOG=SAMPLE;");
  16.         //接続ユーザー名
  17.         sb.Append("USER ID=Administrator;");
  18.         //パスワード
  19.         sb.Append("PASSWORD=P@ssw0rd");
  20.         
  21.         using (SymfowareConnection con = new SymfowareConnection(sb.ToString()))
  22.         using (SymfowareCommand cmd = new SymfowareCommand()) {
  23.             // コネクションオープン
  24.             con.Open();
  25.             
  26.             Console.WriteLine("接続成功");
  27.             
  28.             cmd.Connection = con;
  29.             cmd.CommandText = "SELECT * FROM SC_POST.POST_CODE";
  30.             
  31.             //SELECT 実行
  32.             using (SymfowareDataReader dr = cmd.ExecuteReader()) {
  33.                 
  34.                 while(dr.Read()) {
  35.                     Console.WriteLine("{0}, {1}", dr["郵便番号"], dr["住所"]);
  36.                 }
  37.                 
  38.             }
  39.         }
  40.         
  41.     }
  42. }




実行すると、ちゃんとデータが検索出来ました。

167_02.png






パラメーターを指定した検索



こんな感じで、パラメーター置換によるSQL文の実行が可能でした。


  1. using System;
  2. using System.Text;
  3. using System.Data;
  4. using Fujitsu.Symfoware.Client;
  5. public class Sample {
  6.     
  7.     [STAThread]
  8.     public static void Main(string[] args) {
  9.         
  10.         StringBuilder sb = new StringBuilder();
  11.         //サーバー
  12.         sb.Append("DATA SOURCE=192.168.1.6;");
  13.         //ポート
  14.         sb.Append("PORT=2050;");
  15.         //データベース名
  16.         sb.Append("INITIAL CATALOG=SAMPLE;");
  17.         //接続ユーザー名
  18.         sb.Append("USER ID=Administrator;");
  19.         //パスワード
  20.         sb.Append("PASSWORD=P@ssw0rd");
  21.         
  22.         using (SymfowareConnection con = new SymfowareConnection(sb.ToString()))
  23.         using (SymfowareCommand cmd = new SymfowareCommand()) {
  24.             // コネクションオープン
  25.             con.Open();
  26.             
  27.             Console.WriteLine("接続成功");
  28.             
  29.             cmd.Connection = con;
  30.             cmd.CommandText = "SELECT * FROM SC_POST.POST_CODE WHERE 郵便番号 = ?";
  31.             
  32.             //パラメーターのデータ型指定
  33.             cmd.Parameters.Add("郵便番号", SymfowareDbType.Char);
  34.             
  35.             //引数を検索条件に指定
  36.             cmd.Parameters["郵便番号"].Value = args[0];
  37.             
  38.             //SELECT 実行
  39.             using (SymfowareDataReader dr = cmd.ExecuteReader()) {
  40.                 
  41.                 while(dr.Read()) {
  42.                     Console.WriteLine("{0}, {1}", dr["郵便番号"], dr["住所"]);
  43.                 }
  44.                 
  45.             }
  46.         }
  47.         
  48.     }
  49. }



167_03.png




Symfoware V11から、パラメーターに名称が設定できるようになったみたいです。


  1. using System;
  2. using System.Text;
  3. using System.Data;
  4. using Fujitsu.Symfoware.Client;
  5. public class Sample {
  6.     
  7.     [STAThread]
  8.     public static void Main(string[] args) {
  9.         
  10.         StringBuilder sb = new StringBuilder();
  11.         //サーバー
  12.         sb.Append("DATA SOURCE=192.168.1.6;");
  13.         //ポート
  14.         sb.Append("PORT=2050;");
  15.         //データベース名
  16.         sb.Append("INITIAL CATALOG=SAMPLE;");
  17.         //接続ユーザー名
  18.         sb.Append("USER ID=Administrator;");
  19.         //パスワード
  20.         sb.Append("PASSWORD=P@ssw0rd");
  21.         
  22.         using (SymfowareConnection con = new SymfowareConnection(sb.ToString()))
  23.         using (SymfowareCommand cmd = new SymfowareCommand()) {
  24.             // コネクションオープン
  25.             con.Open();
  26.             
  27.             Console.WriteLine("接続成功");
  28.             
  29.             cmd.Connection = con;
  30.             cmd.CommandText = "SELECT * FROM SC_POST.POST_CODE WHERE 郵便番号 = :任意の名称";
  31.             
  32.             //パラメーターのデータ型指定
  33.             cmd.Parameters.Add("任意の名称", SymfowareDbType.Char);
  34.             
  35.             //引数を検索条件に指定
  36.             cmd.Parameters["任意の名称"].Value = args[0];
  37.             
  38.             //SELECT 実行
  39.             using (SymfowareDataReader dr = cmd.ExecuteReader()) {
  40.                 
  41.                 while(dr.Read()) {
  42.                     Console.WriteLine("{0}, {1}", dr["郵便番号"], dr["住所"]);
  43.                 }
  44.                 
  45.             }
  46.         }
  47.         
  48.     }
  49. }




SQL Serverと異なるのは、
・名称は「@」ではなく「:」をつけて指定すること。
・「Parameters.Add」するときに指定する名称には、「:」は不要
・データ型を指定するときは、「System.Data.SqlDbType」ではなく「SymfowareParameter.SymfowareDbType」
を使用すること。


SymfowareParameter.SymfowareDbTypeで使用できるのは以下のとおり。


BLOB
Char
VarChar
NChar
NCharVarying
Date
Time
Timestamp
Numeric
Decimal
Real
DoublePrecision
SmallInt
Int
IntervalYear
IntervalMonth
IntervalYearToMonth
IntervalDay
IntervalDayToHour
IntervalDayToMinute
IntervalDayToSecond
IntervalHour
IntervalHourToMinute
IntervalHourToSecond
IntervalMinute
IntervalMinuteToSecond
IntervalSecond


関連記事

コメント

非公開コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
Symfoware まとめ

PR




検索フォーム

月別アーカイブ