[동영상]C#, ADO.NET, 윈폼 미니 프로젝트(1) - 오라클19C 이용한 로그인 OLEDB, ODP.NET, ODAC 실습, 닷넷교육, 닷넷학원, 시샵학원, C#학원, C#교육
http://ojc.asia/bbs/board.php?bo_table=LceADOnet&wr_id=76
ojc.asia
https://www.youtube.com/watch?v=RLiaZaEdyqs&list=PLxU-iZCqT52CA9Y474h7UbqmWqXwIZ-hl&index=1&t=1s

https://www.youtube.com/watch?v=m7Q9fwhXg8w&list=PLxU-iZCqT52CtVOhmaR6Nd-65M163g9u-&index=1


윈폼, ADO.NET 미니 프로젝트(1)
오라클19C 이용한 로그인
OLEDB, ODP.NET
2가지 방법 실습
초보 C# 개발자분들을 위해 C#, 윈폼, ADO.NET을 이용하여 다음과 같은 기능을 구현하는 미니 프로젝트를 진행 합니다.
실습환경 : 오라클 19C, VS 2022
OLEDB, ODP.NET 2가지 방법으로 오라클 DB에 접속하여 쿼리 구사
- 사용자 로그인 - TreeView, MenuStrip 사용하여 메뉴구성 - ListView를 이용하여 Adapter를 사용하지 않고 데이터 출력,수정,삭제,입력 - DataGridView를 사용한 CRUD 구현 - OleDbDataAdapter를 이용한 CRUD 구현 및 Transaction 처리 - Timer, Deligate를 이용한 DataGridView 자동갱신 구현 - MessageFilter를 이용한 ALT+F4 키 막기 - 계산기 기능 - File 로깅 - OpenFileDialog를 이용한 로그파일 보기 - HtmlAgilityPack을 이용한 간단한 웹크롤러, 웹페이지파싱 |
C# 윈폼(ADO.NET, ORACLE을 이용한 로그인 실습)
[실습 환경 구성]
1. 오라클 전용 드라이버를 사용하기 위해 ODP.NET을 사용하면 https://www.oracle.com/database/technologies/dotnet-odacdeploy-downloads.html 에 접속하여 ODAC 관련 ZIP 파일을 다운받아 setup.exe를 실행하여 오라클 유니버설 인스톨러를 통해 설치해야 한다. ODAC에는 오라클 접근을 위한 여러 드라이버들이 존재한다.

2. OLEDB를 사용방식으로 오라클에 접근하기 위해서는 System.Data 네임스페이스를 사용하면 되고 별다른 설치는 필요 없다.
3. VS2022에서 우리가 만드는 프로젝트를 64비트로 작동 시키기 위해 프로젝트에서 마우스 우측버튼 속성창의 빌드에서 플랫폼대상을 *64로 선택해야 한다.

[로그인을 위한 멤버 테이블]
create table member (
id varchar2(10) primary key,
pwd varchar2(10)
);
insert into member (id, pwd) values ('ojc','ojc');
commit;
[주소록 데이터 저장을 위한 테이블]
create table addrbook (
name varchar2(20) primary key,
sex varchar2(1),
addr varchar2(50),
tel varchar2(20)
);
insert into addrbook values ('김길동','M','서울 구로구','851-4790');
insert into addrbook values ('나길숙','F','서울 강남구','777-4790');
commit;
select * from addrbook;
1. 첫번째 단계로 오라클 데이터베이스, ADO.NET를 이용하여 아이디, 비밀번호를 입력 받아 로그인 하는 예제를 작성해보자. (SQL문장 처리내역은 별도의 로그파일에 기록)
2. AddrBook 이라는 윈도우 응응 프로그램으로 프로젝트를 생성하자.
총 5개의 파일이 필요하다.
- 메인 클래스파일 : Program.cs,
- 로깅용 클래스파일 : Log.cs,
- 공통함수용 클래스 파일 : Common_DB.cs
- 윈폼파일 : FrmLogin.cs
- 메인화면 : FrmMDIMain.cs
3. 메인 클래스 Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AddrBook
{
internal static class Program
{
/// <summary>
/// 해당 애플리케이션의 주 진입점입니다.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FrmLogin());
}
}
}
4. Log출력용 Class 파일 Log.cs (클래스 파일을 추가하자.)
using System;
using System.IO;
namespace AddrBook
{
class Log
{
//C드라이브에dotnet폴더를만들자.
public static void WriteLine(string name, string e)
{
string filename = @"c:\dotnet\" + name;
string logtime = DateTime.Now.ToString();
FileStream aFile = new FileStream(filename, FileMode.Create);
StreamWriter aWriter = new StreamWriter(aFile, System.Text.Encoding.Default);
aWriter.WriteLine("[" + logtime + "] ");
aWriter.WriteLine(e);
aWriter.Flush();
aWriter.Close();
}
}
}
5. 공통 Class 파일 Common_DB.cs (DB접속, SQL문 처리용)
using System; using System.Data; using System.Data.OleDb; using System.Data.SqlTypes; using System.Windows.Forms; using System.Collections; namespace AddrBook { public class Common_DB { //----------------------------------------------------------------------------- // DataBase Connection //----------------------------------------------------------------------------- public static OleDbConnection DBConnection() { OleDbConnection Conn; //아래는 오라클용 접속 문자열, data source 애는 tnsnames.ora 파일에 있는 Alias명을 넣으면 됩니다. //32비트 //string ConStr = "Provider=MSDAORA;data source=onj;User ID=scott;Password=tiger"; //64비트 string ConStr = "Provider=OraOLEDB.Oracle;data source=orcl;User ID=scott;Password=tiger"; //MS-SQL OLEDB 방식 //string ConStr = @"Provider=SQLOLEDB;Data Source=localhost\OJC;Initial Catalog=test;Integrated Security=SSPI"; Conn = new OleDbConnection(ConStr); return Conn; } //----------------------------------------------------------------------------- // DataSelect //----------------------------------------------------------------------------- public static OleDbDataReader DataSelect(string sql, OleDbConnection Conn) { try { OleDbCommand myCommand = new OleDbCommand(sql, Conn); return myCommand.ExecuteReader(); } catch (Exception ex) { //Log File에 출력 MessageBox.Show(sql + "\n" + ex.Message, "DataSelect"); return null; } finally { } } //----------------------------------------------------------------------------- // DataDelete, DataInsert //----------------------------------------------------------------------------- public static bool DataManupulation(string sql, OleDbConnection Conn) { try { OleDbCommand myCommand = new OleDbCommand(sql, Conn); myCommand.ExecuteNonQuery(); return true; } catch (Exception ex) { //Log File에 출력 MessageBox.Show(sql + "\n" + ex.Message, "DataManupulation"); return false; } finally { } } } } |
6. FrmLogin.cs에 아래와 같이 컨트롤을 배치하자.
- Form(FrmLogin.cs, Name:FrmLogin)
- TextBox(Name : txtID), TextBox(Name : txtPWD)
- Button(Name : button1)

7. 로그인 화면 FrmLogin.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Login{
public partial class FrmLogin : Form {
private OleDbConnection LocalConn;
public FrmLogin() {
InitializeComponent();
}
static void Main() {
Application.Run(new FrmLogin());
}
private void button1_Click(object sender, EventArgs e) {
OleDbDataReader myReader;
string sql = null;
try {
LocalConn = Common_DB.DBConnection();
LocalConn.Open();
if (txtID.Text == "" || txtPWD.Text == "")
{
MessageBox.Show("ID 또는 Password를 입력 하세요...");
return;
}
sql = "select pwd from member ";
sql += " where id = " + "'" + txtID.Text + "'“;
myReader = Common_DB.DataSelect(sql, LocalConn);
if (myReader.Read()) {
if (txtPWD.Text != myReader["pwd"].ToString())
{
MessageBox.Show("Password가 맞지 않습니다...");
return;
}
}
else {
MessageBox.Show("등록되지 않은 ID 입니다.");
return;
}
//----------- ID가 PWD가 맞는 경우
Form f = new Form();
f.Text = "로그인 OK";
f.ShowDialog();
}
catch (Exception e1) {
Log.WriteLine("FrmLogin", e1.ToString());
MessageBox.Show(e1.ToString() + sql, "FrmLogin :: 로그인오류!");
}
}
//패스워드를 입력하고 엔터키를 입력해도 로그인 되도록…
private void txtPWD_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter) {
button1_Click(sender, e);
}
}
}
}
8. 메인화면 FrmMDIMain.cs
좌측에는 treeview를 배치하자. 이름은 treeView1로 폼 로딩시 트리 메뉴를 구성한다.

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace AddrBook { public partial class FrmMDIMain : Form { public FrmMDIMain() { InitializeComponent(); } private void FrmMDIMain_Load(object sender, EventArgs e) { TreeNode node1 = new TreeNode("화일"); node1.Tag = 1; node1.ImageIndex = 0; node1.SelectedImageIndex = 0; node1.Expand(); TreeNode node11 = new TreeNode("Calculator"); node11.ImageIndex = 1; node11.SelectedImageIndex = 1; node11.Tag = 11; TreeNode node12 = new TreeNode("Web-Crawler"); node12.ImageIndex = 2; node12.SelectedImageIndex = 1; node12.Tag = 12; TreeNode node13 = new TreeNode("View Log"); node13.ImageIndex = 3; node13.SelectedImageIndex = 2; node13.Tag = 13; TreeNode node14 = new TreeNode("Exit"); node14.ImageIndex = 4; node14.SelectedImageIndex = 3; node14.Tag = 14; node1.Nodes.Add(node11); node1.Nodes.Add(node12); node1.Nodes.Add(node13); node1.Nodes.Add(node14); //------------------------------------- TreeNode node2 = new TreeNode("주소록"); node2.ImageIndex = 0; node2.SelectedImageIndex = 0; node2.Tag = 2; node2.Expand(); TreeNode node21 = new TreeNode("ListView이용"); node21.ImageIndex = 1; node21.SelectedImageIndex = 1; node21.Tag = 21; TreeNode node22 = new TreeNode("DataGrid이용"); node22.ImageIndex = 1; node22.SelectedImageIndex = 1; node22.Tag = 22; node2.Nodes.Add(node21); node2.Nodes.Add(node22); treeView1.Nodes.Add(node1); treeView1.Nodes.Add(node2); } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { } } } |
9. 실행 결과


#시샵동영상, #ADO.NET, #윈폼 , #오라클, #오라클로그, #OLEDB, #ODP.NET, #ODAC, #닷넷동영상, #닷넷교육, #시샵교육, #ADO.NET로그인, 시샵동영상, ADO.NET, 윈폼 , 오라클, 오라클로그, OLEDB, ODP.NET, ODAC, 닷넷동영상, 닷넷교육, 시샵교육, ADO.NET로그인,