DB를 사용하여 뭔가 쓸만한 프로그램을 만들어 보려다가... 학교 전화번호부를 만들어보기로 했습니다. 구내 전화번호 찾는 경우가 많거든요. 프로그램은 다음과 같은 UI를 갖습니다.
대학 캠퍼스가 두 곳이라 전화번호부가 두개로 나뉘어 있습니다. 검색도 두 캠퍼스를 나누어 하도록 만들었습니다.
ACCESS DB를 사용하며 두개 테이블의 필드는 다음과 같습니다. 이름, 부서명, 직급명, 전화번호 등으로 검색이 가능하도록 하겠습니다.
XAML 파일은 다음과 같습니다.
<Window x:Class="phoneBook.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="건양대학교 전화번호부(2014.5)" Height="270" Width="487" ResizeMode="NoResize" Background="#FFDDE7F3">
<Grid Margin="0,0,0,-4">
<TextBox Name="txtNonsan" HorizontalAlignment="Left" Height="23" Margin="39,40,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" KeyDown="txtNonsan_KeyDown"/>
<TextBox Name="txtDaejon" HorizontalAlignment="Left" Height="23" Margin="244,41,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" KeyDown="txtDaejon_KeyDown"/>
<TextBlock HorizontalAlignment="Left" Margin="39,19,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Text="논산캠퍼스" Width="62"/>
<TextBlock HorizontalAlignment="Left" Margin="244,20,0,0" TextWrapping="Wrap" Text="대전캠퍼스(세종,계룡)" VerticalAlignment="Top" Width="122"/>
<Button x:Name="btnNonsan" Content="검색" HorizontalAlignment="Left" Margin="168,40,0,0" VerticalAlignment="Top" Width="64" Click="btnNonsan_Click"/>
<Button x:Name="btnDaejon" Content="검색" HorizontalAlignment="Left" Margin="369,41,0,0" VerticalAlignment="Top" Width="61" Click="btnDaejon_Click"/>
<ListBox Name="lbNonsan" HorizontalAlignment="Left" Height="126" Margin="39,68,0,0" VerticalAlignment="Top" Width="391"/>
<Label Content="※ 성명, 부서명, 직급명, 전화번호 등으로 검색하실 수 있습니다" HorizontalAlignment="Left" Margin="39,199,0,0" VerticalAlignment="Top"/>
</Grid>
</Window>
C# 소스파일을 설명하지요.
우선 OleDb를 사용하기 위해 다음을 추가합니다.
using System.Data.OleDb;
소스코드는 다음과 같습니다.
connstr을 보면 전화번호부 DB는 실행파일과 같은 폴더에 있어야 합니다. 파일이름은 전화번호부.accdb 입니다.
sql 문에 like '%{0}%' 를 썼기 때문에 입력한 문자열이 매칭되는 모든 레코드를 출력하게 됩니다. 예를 들어 텍스트박스에 "강"이라고 치고 검색을 하면 "강"이 들어간 모든 레코드가 출력되겠지요. 성명, 부서명, 직급명, 연락처를 검색할 수 있습니다.
namespace phoneBook
{
/// <summary>
/// MainWindow.xaml에 대한 상호 작용 논리
/// </summary>
public partial class MainWindow : Window
{
OleDbConnection conn = null;
OleDbCommand cmd = null;
OleDbDataReader reader = null;
string connstr = null;
public MainWindow()
{
InitializeComponent();
DbConnect();
}
private void DbConnect()
{
connstr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=./전화번호부.accdb";
}
private void btnNonsan_Click(object sender, RoutedEventArgs e)
{
if (txtNonsan == null)
return;
string sql = string.Format("SELECT * FROM 논산본부 WHERE 성명 like '%{0}%' OR 부서명 like '%{0}%' OR 직급명 like '%{0}%' OR 연락처 like '%{0}%'", txtNonsan.Text);
conn = new OleDbConnection(connstr);
try
{
conn.Open();
cmd = new OleDbCommand(sql, conn);
}
catch (Exception ex)
{
MessageBox.Show("DB 파일이 없습니다.\n전화번호부 파일이 같은 위치에 있어야 합니다\n"
+ex.Message+"\nbikang@konyang.ac.kr로 연락주세요", "에러: DB 없음");
return;
}
try
{
reader = cmd.ExecuteReader();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
lbNonsan.Items.Clear();
while (reader.Read())
{
string item = "";
item += reader["내선번호"].ToString() + " ";
item += reader["성명"].ToString() + " ";
item += reader["부서명"].ToString() + " ";
item += reader["직급명"].ToString() + " ";
item += reader["연락처"].ToString() + " ";
item += reader["비고"].ToString() + " ";
lbNonsan.Items.Add(item);
}
reader.Close();
conn.Close();
}
private void btnDaejon_Click(object sender, RoutedEventArgs e)
{
if (txtDaejon == null)
return;
string sql = string.Format("SELECT * FROM 대전세종계룡캠퍼스 WHERE 성명 like '%{0}%' OR 부서명 like '%{0}%' OR 직급명 like '%{0}%' OR 연락처 like '%{0}%'", txtDaejon.Text);
conn = new OleDbConnection(connstr);
conn.Open();
cmd = new OleDbCommand(sql, conn);
try
{
reader = cmd.ExecuteReader();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
lbNonsan.Items.Clear();
while (reader.Read())
{
string item = "";
item += reader["내선번호"].ToString() + " ";
item += reader["성명"].ToString() + " ";
item += reader["부서명"].ToString() + " ";
item += reader["직급명"].ToString() + " ";
item += reader["연락처"].ToString() + " ";
item += reader["비고"].ToString() + " ";
lbNonsan.Items.Add(item);
}
reader.Close();
conn.Close();
}
private void txtNonsan_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key != Key.Enter)
return;
TextBox box = sender as TextBox;
if (string.IsNullOrEmpty(box.Text))
return;
btnNonsan_Click(sender, e);
}
private void txtDaejon_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key != Key.Enter)
return;
TextBox box = sender as TextBox;
if (string.IsNullOrEmpty(box.Text))
return;
btnDaejon_Click(sender, e);
}
}
}
프로그램에 보면 icon을 사용했는데요... 이건 프로젝트의 속성 페이지를 열어서 다음과 같이 아이콘을 바꾸어 주면 됩니다.
BeeEye Dmu
'C# WPF' 카테고리의 다른 글
[C# WPF] Image Button (0) | 2014.09.10 |
---|---|
[C# WPF] Combo Box와 ListBox를 이용한 DB 프로그램(학생정보관리프로그램) (0) | 2014.06.23 |
[C# WPF]Access DB를 이용한 전화번호부 프로그램(DataGrid 사용) (1) | 2014.05.27 |
[C# WPF]Access DB를 이용한 전화번호부 프로그램(ListBox 사용) (0) | 2014.05.26 |
[C# WPF]WPF DataGrid로 데이터베이스 연결하기 (0) | 2013.12.21 |