2019년 1월 26일 토요일

(WPF, 오라클연동)WPF DataBinding, 데이터 바인딩을 이용하여 오라클 EMP 테이블 데이터를 ListView에 뿌리기(ODP.NET, ItemTemplate)

(WPF, 오라클연동)WPF DataBinding, 데이터 바인딩을 이용하여 오라클 EMP 테이블 데이터를 ListView에 뿌리기(ODP.NET, ItemTemplate)
n ODP.NET을 이용하여 오라클 DB의 EMP 테이블의 내용을 ListView에 출력하는 예제를 작성해 보자.
n Visual Studio 2017에서 ODP.NET을 사용하기 위해서는 Oracle Developer Tools for Visual Studio 2017을 다운받아 설
n 오라클 클라이언트 설치(옵션)
n 오라클 클라이언트 설치 후 오라클홈(C:\app\사용자\product\11.2.0\client_1) 디렉토리 아래 NETWORK\Admin 폴더의 tnsnames.ora 파일에 속하고자 하는 Oracle Server의 접속정보 추가
// ONJ라는 TNS NAME을 정의하는데 C# 코드에서 “TOPCREDU”를 DB 접속 자열의 Data Source 항목에 기술한다.
TOPCREDU =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = topcredu) ß DB명
)
)
n WPF 응용프로그램 형태의 프로젝트를 생성(프로젝트명 : WpfOracleTest)
n 참조 추가 : 프로젝트 생성 후 솔루션 탐색기 -> 참조 -> 참조추가 선택 후 확장 >> Oracle.MaangedDataAccess를 선택하여 추가하자. 오라클홈\network\admin 아래에 tnsnames.ora을 생성
n 테스트 PC가 64Bit 라면 프로젝트에서 마우스 오른쪽 속성 선택 후 빌드 -> 플랫폼 대상(Target Platform)을 x64로 선택한다. (32Bit인 경우 생략)
EmpViewModel.cs
using System;
using System.ComponentModel;
using System.Windows.Input;
namespace WpfOracleTest
{
public class EmpViewModel {
int empno = 0;
string ename = string.Empty;
string job = string.Empty;
// public 프로퍼티
public int Empno
{
get { return empno; }
set { this.empno = value; }
}
// public 프로퍼티
public string Ename
{
get { return ename; }
set { this.ename = value; }
}
// public 프로퍼티
public string Job
{
get { return job; }
set { this.job = value; }
}
}
}
MainWindow.xaml
<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"/>
<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>
MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Windows;
using System.Data;
using Oracle.ManagedDataAccess.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=(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.27)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = topcredu)
)
) ;User Id=scott;Password=tiger";
//string strCon = "data source=topcredu;User ID=scott;Password=tiger";
conn = new OracleConnection(strCon);
conn.Open();
MessageBox.Show("DB Connection OK!");
}
catch(Exception error)
{
MessageBox.Show(error.ToString());
}
}
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();
}
}
}
n 실행화면

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...