今回は、Oracle.DataAccess を使ってデータを検索、データグリッドに表示してみます。
プログラムは前回までのものを流用します。
【WPF】別ウィンドウに値を受け渡して、データを更新できるようにしてみた
今までと同様、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
using System.Data;
using Oracle.DataAccess.Client;
MainWindow.xaml.cs
//using (var conn = new SQLiteConnection("Data Source=SampleDb.sqlite"))
using (var conn = new OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;"))
MainWindow.xaml.cs
public MainWindow()
{
InitializeComponent();
using (var conn = new OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;"))
{
conn.Open();
// データを取得
OracleCommand cmd = new OracleCommand("SELECT * FROM MSTKIND", conn);
OracleDataAdapter da = new OracleDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
// コンボボックスに値を設定
List<Kind> sources = new List<Kind>();
Kind k = new Kind();
k.KindCd = "";
k.KindName = "指定なし";
sources.Add(k);
foreach (DataRow row in dt.Rows)
{
k = new Kind();
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
/// <summary>
/// 検索処理(非同期)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SearchProcess(object sender, DoWorkEventArgs e)
{
// 時間のかかるようにする
System.Threading.Thread.Sleep(3000);
// 猫データマスタを取得してコンボボックスに設定する
using (var conn = new OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;"))
{
conn.Open();
String searchName = (e.Argument as Object[])[0] as String;
String searchKind = (e.Argument as Object[])[1] as String;
// データを取得
String sql = "SELECT * FROM TBLCAT";
String where = "";
if (searchName != "")
{
where = " WHERE NAME LIKE '" + searchName + "%'";
}
if (searchKind != "")
{
if (where != "")
{
where += " AND";
}
else
{
where = " WHERE";
}
where += " KIND_CD = '" + searchKind + "'";
}
sql += where;
OracleCommand cmd = new OracleCommand(sql, conn);
OracleDataAdapter da = new OracleDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
List<CatModel> sources = new List<CatModel>();
foreach (DataRow row in dt.Rows)
{
CatModel c = new CatModel();
c.IsChecked = false;
String no = 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;
}
}
/// <summary>
/// データ変換処理
/// </summary>
/// <param name="value"></param>
/// <param name="targetType"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
using (var conn = new OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;"))
{
conn.Open();
// データを取得
OracleCommand cmd = new OracleCommand("SELECT * FROM MSTKIND WHERE KIND_CD = '" + value + "'", conn);
OracleDataAdapter da = new OracleDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
String ret = "";
if (dt.Rows.Count == 1)
{
ret = dt.Rows[0]["KIND_NAME"].ToString();
}
conn.Close();
return ret;
}
}
ひとまずこれで検索はできるようになるはずです。
検索ボタンをクリックします。
無事に検索してデータが表示されました。
例によって、登録・更新・削除はまた次回ということで。
ではでは。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント