12
C#, WPF, ADO.NET XAML, Oracle ODP.NET 심심 심심 탑탑탑탑탑 (topcredu.co.kr), 탑탑탑

(C#,WPF,오라클,ODP.NET예제)C#,WPF로 EMP 테이블 데이터를 데이터 바인딩을 이용하여 ListView에 출력하기

  • Upload
    3-2

  • View
    265

  • Download
    13

Embed Size (px)

Citation preview

Page 1: (C#,WPF,오라클,ODP.NET예제)C#,WPF로 EMP 테이블 데이터를 데이터 바인딩을 이용하여 ListView에 출력하기

C#, WPF, ADO.NET

XAML, Oracle ODP.NET 심플 예제

탑크리에듀 (topcredu.co.kr), 이종철

Page 2: (C#,WPF,오라클,ODP.NET예제)C#,WPF로 EMP 테이블 데이터를 데이터 바인딩을 이용하여 ListView에 출력하기

개요 및 Oracle Develpoer Tools 설치• ODP.NET 을 이용하여 오라클 DB 의 EMP 테이블의 내용을 ListView 에 출력하는 예제 .• Visual Studio 2015 에서 ODP.NET 을 사용하기 위해서는 Oracle Developer Tool

for Visual Studio 2015 를 다운받아 설치하면 된다 . ( http://www.oracle.com/technetwork/topics/dotnet/downloads/odacmsidownload-2745497.html )

• 오라클홈 디렉토리 아래 NETWORK\Admin 폴더에 tnsnames.ora 파일에 다음 접속하고자 하는 Oracle Server 의 접속정보 추가ONJ = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = onj) DB명 )• )

Page 3: (C#,WPF,오라클,ODP.NET예제)C#,WPF로 EMP 테이블 데이터를 데이터 바인딩을 이용하여 ListView에 출력하기

프로젝트 생성• WPF 응용프로그램 형태의 프로젝트를 생성 ( 프로젝트명 : WpfOra-

cleTest)• 참조 추가 : 프로젝트 생성 후 솔루션 탐색기 -> 참조 -> 참조추가 선택 후 “찾아보기” 버튼을 클릭하여 %ORACLE_HOME%\ODP.NET\bin\

2.x\Oracle.DataAccess.dll 을 선택하여 추가하자 .• 테스트 PC 가 64Bit 윈도우 10 이므로 프로젝트에서 마우스 오른쪽 속성 선택 후 빌드 -> 플랫폼 대상 (Target Platform) 을 x64 로 선택한다 .

(32Bit 인 경우 생략 )

Page 4: (C#,WPF,오라클,ODP.NET예제)C#,WPF로 EMP 테이블 데이터를 데이터 바인딩을 이용하여 ListView에 출력하기

EmpViewModel.cs(1)using System;using System.ComponentModel;using System.Windows.Input; namespace WpfOracleTest{ public class EmpViewModel : INotifyPropertyChanged { int empno = 0; string ename = string.Empty; string job = string.Empty;

// 속성이 바뀔때 이벤트 발생하도록 이벤트 정의 public event PropertyChangedEventHandler PropertyChanged;  // public 프로퍼티 public int Empno { get { return empno; } set { this.empno = value; } }  // public 프로퍼티 public string Ename { get { return ename; } set { this.ename = value; } }

Page 5: (C#,WPF,오라클,ODP.NET예제)C#,WPF로 EMP 테이블 데이터를 데이터 바인딩을 이용하여 ListView에 출력하기

EmpViewModel.cs(2) // public 프로퍼티 public string Job { get { return job; } set { this.job = value; } }  protected void OnPropertyChanged(string propertyName) { // 이벤트를 발생시킨다 . if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } }}

Page 6: (C#,WPF,오라클,ODP.NET예제)C#,WPF로 EMP 테이블 데이터를 데이터 바인딩을 이용하여 ListView에 출력하기

MainWindow.xaml(1)<Window x:Class="WpfOracleTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfOracleTest" mc:Ignorable="d" Title="MainWindow" Height="350" Width="461.659"> <Grid Margin="0,0,3.2,-0.2"> <Button x:Name="button" Content="DB Connect" HorizontalAlignment="Left" Margin="43,28,0,0" VerticalAlignment="Top" Width="75" RenderTransformOrigin="0.391,-0.29" Click="DB_Connect"/>

Page 7: (C#,WPF,오라클,ODP.NET예제)C#,WPF로 EMP 테이블 데이터를 데이터 바인딩을 이용하여 ListView에 출력하기

MainWindow.xaml(2)<ListView Margin="10,66,10,10" Name="lstView"> <ListView.ItemTemplate> <DataTemplate> <WrapPanel> <TextBlock Text="Empno: " /> <TextBlock Text="{Binding Empno}" FontWeight="Bold" /> <TextBlock Text=", " /> <TextBlock Text=" (" /> <TextBlock Text="Ename: " /> <TextBlock Text="{Binding Ename}" TextDecorations="Underline" FontWeight="Bold" /> <TextBlock Text=")" /><TextBlock Text="{Binding Job}" Foreground="Blue" Cursor="Hand" /> </WrapPanel> </DataTemplate> </ListView.ItemTemplate> </ListView><Button x:Name="button1" Content="Get Data" HorizontalAlignment="Left" Margin="137,28,0,0" VerticalAlignment="Top" Width="75" Click="Select_Emp"/> </Grid></Window>

Page 8: (C#,WPF,오라클,ODP.NET예제)C#,WPF로 EMP 테이블 데이터를 데이터 바인딩을 이용하여 ListView에 출력하기

MainWindow.xaml(3)<ListView Margin="10,66,10,10" Name="lstView"> <ListView.ItemTemplate> <DataTemplate> <WrapPanel> <TextBlock Text="Empno: " /> <TextBlock Text="{Binding Empno}" FontWeight="Bold" /> <TextBlock Text=", " /> <TextBlock Text=" (" /> <TextBlock Text="Ename: " /> <TextBlock Text="{Binding Ename}" TextDecorations="Underline" FontWeight="Bold" /> <TextBlock Text=")" /><TextBlock Text="{Binding Job}" Foreground="Blue" Cursor="Hand" /> </WrapPanel> </DataTemplate> </ListView.ItemTemplate> </ListView>

Page 9: (C#,WPF,오라클,ODP.NET예제)C#,WPF로 EMP 테이블 데이터를 데이터 바인딩을 이용하여 ListView에 출력하기

MainWindow.xaml.cs(1)using System;using System.Collections.Generic;using System.Windows;using System.Data;using Oracle.DataAccess.Client; namespace WpfOracleTest { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); }  OracleConnection conn;

private void DB_Connect(object sender, RoutedEventArgs e) { try { string strCon = "data source=onj;User ID=scott;Password=tiger"; conn = new OracleConnection(strCon); conn.Open();  MessageBox.Show("DB Connection OK!");  } catch(Exception error) { MessageBox.Show(error.ToString()); } }

Page 10: (C#,WPF,오라클,ODP.NET예제)C#,WPF로 EMP 테이블 데이터를 데이터 바인딩을 이용하여 ListView에 출력하기

MainWindow.xaml.cs(2)private void Select_Emp(object sender, RoutedEventArgs e) { string sql = "select empno, ename, job from emp ";  OracleCommand comm = new OracleCommand(); if(conn == null) DB_Connect(this, null); comm.Connection = conn; comm.CommandText = sql; OracleDataReader reader = comm.ExecuteReader(CommandBehavior.CloseConnection); List<EmpViewModel> emps = new List<EmpViewModel>();

while (reader.Read()) { emps.Add(new EmpViewModel() { Empno = reader.GetInt32(reader.GetOrdinal("empno")), Ename = reader.GetString(reader.GetOrdinal("ename")), Job = reader.GetString(reader.GetOrdinal("job")) }); }  lstView.ItemsSource = emps; reader.Close(); } }}

Page 11: (C#,WPF,오라클,ODP.NET예제)C#,WPF로 EMP 테이블 데이터를 데이터 바인딩을 이용하여 ListView에 출력하기

실행 화면