【WPF】「Oracle.DataAccess」を利用して取得したデータを DataGrid に表示してみる
おはようございます。
今回は、Oracle.DataAccess を使ってデータを検索、データグリッドに表示してみます。
お決まりですが、プログラムは前回までのものを流用します。
https://www.doraxdora.com/blog/2017/08/19/post-2109/
今までと同様、Entity Framework 、LINQ を利用してやってみようと思ったのですが、
ちょっと調べきれなかったのでひとまず DataTable を利用して
自力でマッピングするといった感じになってしまいました。
EFとLINQについてはそのうち時間がある時に。。
スポンサーリンク
参照の追加
パッケージ・エクスプローラーの「参照」を右クリックし、「参照の追加」を選択します。
参照マネージャー画面が表示されるので、「参照」ボタンをクリックします。
ファイル選択ダイアログが表示されるので、端末にインストールした「Oracle」から
Oracle.DataAccess.dll ファイルを指定します。
デフォルトであれば、下記のディレクトリにあります。
c:\oraclexe\app\oracle\product\11.2.0\server\odp.net\bin\4\
プログラムの修正
宣言の追加
MainWindow.xaml.cs
1 2 | usingSystem.Data; usingOracle.DataAccess.Client; |
接続処理の変更
MainWindow.xaml.cs
1 2 | //using (var conn = new SQLiteConnection("Data Source=SampleDb.sqlite")) using(varconn=newOracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;")) |
初期表示時の処理を修正
MainWindow.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | publicMainWindow() { InitializeComponent(); using(varconn=newOracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;")) { conn.Open(); // データを取得 OracleCommand cmd=newOracleCommand("SELECT * FROM MSTKIND",conn); OracleDataAdapter da=newOracleDataAdapter(cmd); DataTable dt=newDataTable(); da.Fill(dt); // コンボボックスに値を設定 List<Kind>sources=newList<Kind>(); Kindk=newKind(); k.KindCd=""; k.KindName="指定なし"; sources.Add(k); foreach(DataRow row indt.Rows) { k=newKind(); k.KindCd=row["KIND_CD"].ToString(); k.KindName=row["KIND_NAME"].ToString(); sources.Add(k); } this.search_kind.ItemsSource=sources; this.search_kind.DisplayMemberPath="KindName"; conn.Close(); } } |
検索処理の修正
MainWindow.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | /// <summary> /// 検索処理(非同期) /// </summary> /// <param name="sender"></param> /// <param name="e"></param> privatevoidSearchProcess(objectsender,DoWorkEventArgse) { // 時間のかかるようにする System.Threading.Thread.Sleep(3000); // 猫データマスタを取得してコンボボックスに設定する using(varconn=newOracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;")) { conn.Open(); StringsearchName=(e.Argument asObject[])[0]asString; StringsearchKind=(e.Argument asObject[])[1]asString; // データを取得 Stringsql="SELECT * FROM TBLCAT"; Stringwhere=""; if(searchName!="") { where=" WHERE NAME LIKE '"+searchName+"%'"; } if(searchKind!="") { if(where!="") { where+=" AND"; } else { where=" WHERE"; } where+=" KIND_CD = '"+searchKind+"'"; } sql+=where; OracleCommand cmd=newOracleCommand(sql,conn); OracleDataAdapter da=newOracleDataAdapter(cmd); DataTable dt=newDataTable(); da.Fill(dt); List<CatModel>sources=newList<CatModel>(); foreach(DataRow row indt.Rows) { CatModelc=newCatModel(); c.IsChecked=false; Stringno=row["NO"].ToString(); c.No=int.Parse(row["NO"].ToString()); c.Name=row["NAME"].ToString(); c.Sex=row["SEX"].ToString(); c.Age=int.Parse(row["AGE"].ToString()); c.Kind=row["KIND_CD"].ToString(); c.Favorite=row["FAVORITE"].ToString(); sources.Add(c); } e.Result=sources; } } |
コンバーターの修正
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | /// <summary> /// データ変換処理 /// </summary> /// <param name="value"></param> /// <param name="targetType"></param> /// <param name="parameter"></param> /// <param name="culture"></param> /// <returns></returns> publicobjectConvert(objectvalue,Type targetType,objectparameter,CultureInfo culture) { using(varconn=newOracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;")) { conn.Open(); // データを取得 OracleCommand cmd=newOracleCommand("SELECT * FROM MSTKIND WHERE KIND_CD = '"+value+"'",conn); OracleDataAdapter da=newOracleDataAdapter(cmd); DataTable dt=newDataTable(); da.Fill(dt); Stringret=""; if(dt.Rows.Count==1) { ret=dt.Rows[0]["KIND_NAME"].ToString(); } conn.Close(); returnret; } } |
ひとまずこれで検索はできるようになるはずです。
起動してみる
検索ボタンをクリックします。
無事に検索してデータが表示されました。
まとめ
例によって、登録・更新・削除はまた次回ということで。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません