.NETの最近の記事
昨日、何の会話からそうなったのかは忘れましたが、
.NET(C#)からLINQ経由でMySQLを触りたいですよねーって話を会社でしてました。
まぁなかなかそんなことをしている人もいないと思うのですが、
ちょっと調べてみたら「LINQ <-> ADO.NET <-> MySQL」で遊ぶのが正しいようだと
いうことが分かってきました。
⇒[Think IT] 第1回:LINQとADO.NET Entity Framework (1/3)
⇒C#でMySQLに接続
まだあんまり読めてませんが、下記書籍にもそのようなことが書いてあります。
ちょっと今は遊んでいる時間が取れないので、
また今度遊んでみたいと思います。
ちなみに、、、
Amazonでこんなkの物欲を刺激する本がありました。。。
プログラミングMicrosoft SQL Server 2008 上 (マイクロソフト公式解説書)
プログラミングMicrosoft SQL Server 2008 下 (マイクロソフト公式解説書)
SQLServerでプログラミング・・・・
うーーーん、魅かれる♪
EclipseRCPで構築する手筈になっていた件ですが、
どうもASP.NETも有望視されているようで、検討してみて、というお達しがありました。
なるほどねー、というしかありませんが、
以前購入していて本棚で眠っていた書籍が役に立つ時が来たようです。
★プログラムを作ろう!Microsoft Visual Web Developer 2008 Express Edition入門★
以前、
⇒【DB2】DB2でLINQを使う(のに失敗)
⇒【DB2】DB2でLINQを使う(準備が整う)
というのを書きました。
で、もしかすると別の案件で.NET+DB2っていうのが出てきそうな感じなので、
今日は仕事中に堂々と"調査"しました。
基本はこの↓ページに書かれていることをやります。
⇒Develop a sample application using LINQ programming and the ADO.NET Entity Framework with IBM DB2, IDS, and U2 servers
まず、新規プロジェクトを作成します。
※設定する値等は、参照するdeveloperWorksの記事に極力合わせます。
作成するWindowsFormはこんな感じになります。
ComboBox:1コ
DataGridView:1コ
Button:2コ
Entity Data Modelはこんな感じで進めていきます。
「データベースから生成」を選択。
「新しい接続」ボタンをクリック。
下記画面のように選択します。
接続先のサーバーはとりあえずlocalhost。
ユーザーはdb2admin。
接続先データベースはSAMPLEに変更。
設定が終わった「テスト接続」をクリック。
問題が無ければ、接続テスト完了。
「次へ」ボタンを押すとDBと接続を開始します。
接続中・・・・
データベースオブジェクトを選択。
Entityモデルが生成されました。
で、こっからはソースコードの補足。
■closeボタンの実装(C#)
private void closeForm_Click(object sender, EventArgs e) { m_context.Dispose(); Close(); } |
■フォームのロード処理の実装(C#)
private void Form1_Load(object sender, EventArgs e) { m_context = new SAMPLEEntities(); // SELECT * FROM EMPLOYEE のイメージ var query = from d in m_context.EMPLOYEE select d; try { // ComboBoxに設定するカラム(データ) this.comboBox.DisplayMember = "FIRSTNME"; this.comboBox.DataSource = query; } catch (Exception ex) { MessageBox.Show(ex.Message); } |
■ComboBoxが選択された際の実装(C#)
private void comboBox_SelectedIndexChanged(object sender, EventArgs e) { try { EMPLOYEE empList = (EMPLOYEE)this.comboBox.SelectedItem; // SELECT * FROM EMPLOYEE E, EMP_PHOTO EP // WHERE EP.EMPNO = E.EMPNO のイメージ var query = from o in m_context.EMP_PHOTO where o.EMPNO == empList.EMPNO select o; // データグリッドビューに設定 dataGridView.DataSource = query; dataGridView.AutoResizeColumns( DataGridViewAutoSizeColumnsMode.AllCells); } catch (Exception ex) { MessageBox.Show(ex.Message); } } |
この実装で、画面に何が出てくるかはお楽しみです♪
以前、
というのを書きましたが、
⇒【DB2】Fixpakを当て直す(結局、アンインストール&再インストール)
というエントリでDB2側の問題を修正したので、
改めてDB2 <=> LINQを試してみようと、クライアント側の環境を諸々セットアップし直しました。
⇒Develop a sample application using LINQ programming and the ADO.NET Entity Framework with IBM DB2, IDS, and U2 servers
↑
環境セットアップの詳細等が記載されています。
今回のkがセットアップし直した環境は以下の通り。
■物理マシン■
・Windows XP Home SP3
・Visual Studio 2008 Professional SP1
■データベース仮想マシン■
・Windows Server 2003 SE R2 SP2(32bit)
・DB2V9.5 EE FP3b
前回失敗していたテスト接続の結果は、
以下の画面ショットの通りに見事に成功しました!!
いやいや。
まさかこんな結果になるとは思いませんでしたが、
やりたかったことの事前準備が整ったので、今後時間を見つけて、
DB2 <=> LINQの実装をやってみます!!
参照先の記事にあるように、DB2でLINQを使ってみるべし!!と思ったのでやってみましたが、
結論から言うと、全然ダメでした。。。
kの試した環境は以下の通りです。
■物理マシン1■
・Windows XP Professional SP2
・Visual Studio 2008 Professional SP1
・DB2V9.5 EE FP3b
■物理マシン2■
・Windows XP Home SP3
・Visual Studio 2008 Professional SP1
■仮想マシン1■
・Windows Vista SP1
・Visual Studio 2008 Professional SP1
■仮想マシン2■
・Windows Vista SP1
・Visual Web Developer 2008 SP1
■データベース仮想マシン■
・Windows Server 2003 SE R2 SP2(32bit)
・DB2V9.5 EE FP3b
まず物理・仮想の各クライアントマシンでやってみた、
「IBM Data Server Driver for ODBC, CLI, and .NET」のインストールですが、
画面のように必ずエラーになってしまいます。
いやらしいのが、画面上はエラーと出ていますが、
この後「インストール完了」のダイアログが出るんですよ、これがまた。
で、その後の手順をどんどん次に進めていくことができるのですが、
どーもこれが一番悪いんじゃないか?と思っています。
ちなみに「IBM Data Server Driver for ODBC, CLI, and .NET」をアンインストールする際も、
このエラーダイアログが表示されていました。
次に、上記を無視して進んでいった場合の話ですが、
DB2に対して以下のようなコマンドを発行してテスト接続してみよう、とあるのですが、
これが全然うまくいきません。
testconn20 database=sample;server=localhost:50000;userid=user;password=password
kのトコではこんな感じでガンガンエラーが出ていました。
C:\Program Files\IBM\IBM DATA SERVER DRIVER\bin>testconn20 database=sample;server=localhost:50000;userid=db2admin;password=db2admin Step 1: Printing version info Step 2: Connecting using "database=sample;server=localhost:50000;userid=db2admin;password=db2admin" Unable to open socket to server: 0ERROR [08001] [IBM] SQL30081N 騾壻ソ。繧ィ繝ゥ繝シ縺梧、懷?縺輔l縺セ縺励◆縲?菴ソ逕ィ
C:\Program Files\IBM\IBM DATA SERVER DRIVER\bin> |
なんとなーく、ソケットが開いてねぇとか、
エラーコードからググって引っかけたSQL30081NやDB2をstop/startした際に吐かれたSQL5043NをDB2Forumのやりとりを参考にしてみるものの、今のところ解決していないです。
ちなみにデータベース仮想マシンで同じことをやってみると、
以下のようになります。
C:\Program Files\IBM\SQLLIB\BIN>testconn20.exe database=sample;server=localhost: 50000;userid=db2admin;password=db2admin Step 1: Printing version info Step 2: Connecting using "database=sample;server=localhost:50000;userid=db2admin Test failed. |
情報を整理すると、
1.「IBM Data Server Driver for ODBC, CLI, and .NET」のインストールに失敗する。
2.「IBM Database Add-ins for Visual Studio」のインストールは成功する。
3.1やテスト接続が失敗してもチュートリアルは先に進むことができるが、
アプリケーションの作成中にEDMを作成する際、エラーになるので先へ進めなくなる。
4.コマンドでのテスト接続が失敗すると、DB2がstopする。
5.FP3bのServer Driverだけでなく、FP3aでも同様の事象が発生している。
となっています。
多分、kのところの環境だけ(物理と仮想で4台ですが、、、)なのかな。
追って調査しますが、とりあえずご報告です。
まだ読み始めたところなので、レビューではありませんが、
なかなか良いです。
初心者が知りたいようなことが書いてありますねー。
もちろん玄人さんにもオススメだと思います。
まぁ、Java専門のkがC#の、しかもオライリーの本なんかを買うとは、
1年位前は想像していなかったです。
それくらい、C#には興味があるし、色々と応用ができそうなんですねー。
NASIMさんのブログにあったので思い出したのですが、kもよく間違うパターンがあります。
それはif文の書き方です。
◆Java/PHP
if (条件式) {
・・・・・・・・
} else {
・・・・・・・・
}
◆VB
If (条件式) Then
・・・・・・・・
ELSE
・・・・・・・・
End If
◆ksh
if [[ 式 ]] ; then
・・・・・・・・
else
・・・・・・・・
fi
時々、if文の締め方が分からなくなるんですよね。
kshを書いている時にVBの締め方をよくやってます。
あとVBを書いた時に、Java/PHPの締め方をやっちゃいますね。
他には、最近特に間違うのが、仕事で使っているDB2とMySQLのSQLの書き方です。
例えば、最初の何行かを取得したい場合、、、、
◆DB2
SELECT * FROM テーブル名 FETCH FIRST n ROWS ONLY;
◆MySQL
SELECT * FROM テーブル名 LIMIT n;
※ちなみにOracleだと「SELECT * FROM テーブル名 WHERE ROWNUM < n;」ですが、
※ROWNUMを使用するのは本当はよろしくないんですよね、確か。
FETCH FIRST と LIMITをお互いに間違えて書きます。
色々触っていると色々な書き方があるので混同する原因になる訳です。
まぁ、覚えないと仕事にならないので仕方ありませんけどね。
課題発表当日。
早い段階でSilverlightとJavaアプリケーションの連携が実現できたので、もっといいものにしようと色々やってみたのですが、どれもこれもうまくいかず。。。。
SilverlightとWPFじゃXAMLとして同じだろう、と以前に購入していたXAMLプログラミング WPFアプリケーションの概要と開発を読みつつWPFの勉強を始めてしまった。
その本に出てきていたサンプルをSilverlightへ落とし込んでみるものの、本で使用していたVisualStudioが2005なのとVistaじゃないのが原因の為か、期待通りのUIや動きをしてくれず、、、
そのうち仕事が忙しくなり・・・・
結局、あれからほとんど進展は無かった。
焼け石に水でEclipseでXAMLで紹介したプラグインで、同様にあれこれやってみるものの、今日を迎えて時間切れ・・・
今日は、以下のテーマで課題発表をすることにした。
①SilverlightとJavaの連携(Webサービス連携 or EARファイルに突っ込みでOK!!)
②EclipseでWPF/XAML(マネージコードがJavaで書ける!!そのうちSilverlightも・・・)
③その他(Windows版Safariの話とか)
まぁ、クリエイティブさが主体のワークショップだったので、全然デザインっ気の無いシステマチックな課題発表があってもいいでしょう!!ってことで。
どうなることやら。。。。
課題作成2日目。
思い描いていたSilverlightとJavaアプリケーションの連携が、
どーにかこーにか実現できました。
と、言ってもかなりちょこざいな方法で。
本当はIIS上のSilverlightアプリから、Javaアプリケーションサーバー上のJavaアプリへ通信を行い、Javaアプリからの戻りをXMLデータでSilverlightアプリが受け取って、、、、、、ってやりたかったんだけど、全然うまく行かず。。。
しょうがないので、Javaアプリ側にSilverlightアプリを持っていって、
Javaアプリの元々のインターフェースをSilverlightアプリに差し替える形をチョイスしました。
Javaから戻されたXMLは、C#側ではLINQで処理してます。
LINQだとホント簡単にXMLの処理が出来るのでビックリ!!
実習で使ったサンプルをちょこちょこっとカスタマイズしただけで、うまくいってしまいました。
本来なら、Javaアプリ側をしっかりとしたWebサービスで再構築すると、VisualStudioにある「Web参照の追加」とかが利用でき、C#側からもっと簡単/スマートにロジックの記述ができるみたいです。
これがうまくいくと、IISをフロントサーバーとして、Javaアプリをバックエンドサーバーに配置することも可能になるんではないかと。
SOA?Webサービス?
どっちか分かんないけど、本来のスマートな配備が出来そうです。
まだ、4/15までは時間があるけど、カチカチのWebサービスの実装はちょっとキツイかも・・・
SilverlightアプリのUIを自分なりに磨こうかな。
DeepZoomとか、うまく使えるともっと良くなるんだけど、敷居が高いッス。
ちなみに、、、、、
Windows版のSafariでも問題なく表示できました。