회사에서 다음주부터 파견을 나가는데 C# 모르는 내가 가게 되었다... 우짜지하다가 chatgpt를 이용해서 프로젝트 생성과 사용법을 숙지하는 중에 chatgpt 검색한 내용을 정리하게 되었다.
✅ 1단계: 프로젝트 생성
- Visual Studio 2022 실행
- "새 프로젝트 만들기" 클릭
- "콘솔 앱 (.NET Core 또는 .NET 6/7/8)" 선택
- 언어: C#
- 플랫폼: Windows
- 프로젝트 이름 지정 (예: OracleLinqApp)
- .NET 6 이상 선택 (가능하면 최신)
✅ 2단계: Oracle DB 연결을 위한 NuGet 패키지 설치
Oracle DB랑 연결하려면 Oracle에서 제공하는 ODP.NET이 필요해.
NuGet 패키지 설치 방법:
- 솔루션 탐색기에서 프로젝트 우클릭 → NuGet 패키지 관리
- 찾기 탭에서 아래 패키지 검색하고 설치
Oracle.ManagedDataAccess
Oracle.ManagedDataAccess.EntityFramework
Oracle.ManagedDataAccess 는 기본 ADO.NET 드라이버
Oracle.ManagedDataAccess.EntityFramework 는 LINQ 쓸 때 필요 (Entity Framework 기반)
✅ 3단계: App.config 또는 appsettings.json 설정
Oracle 연결 문자열을 추가해야 해.
나는 여기서 .NET이 8 버전이상일 때는 appsettings.json으로 설정하라고 해서 [프로젝트] 우클릭해서 [추가] - [새 항목] 들어가서 오른쪽 상단에 json을 검색해서 선택하고 아래 쪽에 [파일명]을 입력해서 만들면 된다.
1. appsettings.json 추가
{
"ConnectionStrings": {
"OracleDbContext": "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)));User Id=your_user;Password=your_password;"
}
}
2. 그 다음 Program.cs에서 설정 읽어오도록 수정:
// 1. config 불러오기
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
// 2. connection string 가져오기
var connStr = configuration.GetConnectionString("OracleDb");
// 3. Oracle 연결
using (var conn = new OracleConnection(connStr))
{
conn.Open();
var cmd = conn.CreateCommand();
cmd.CommandText = "SELECT FIRST_NAME, LAST_NAME FROM EMPLOYEES WHERE DEPARTMENT_ID = 10";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine($"{reader.GetString(0)} {reader.GetString(1)}");
}
}
}
중간에 작업하다보면 Configuration에서 에러가 난다... import 되어 있는데 왜 안되는지.... 알고보니 패키지를 받지 않아서이다.
c#에서 ConfigurationBuilder는 using Micorsoft.Extensions.Configuration으로
import 했는데 SetBasePath에서 에러가 나는데... 해결책좀
이라고 구질구질하게 chatgpt한테 질문 했다...
그랬더니 답변은
아래와 같다
==>
SetBasePath()에서 에러가 나는 경우는 일반적으로 SetBasePath() 확장 메서드를 정의한 네임스페이스가 누락되었기 때문입니다.
SetBasePath는 Microsoft.Extensions.Configuration.FileExtensions 네임스페이스에 있는 확장 메서드이고, AddJsonFile은 Microsoft.Extensions.Configuration.Json에 정의되어 있어요. 그래서 ConfigurationBuilder를 제대로 사용하려면 다음과 같은 using 문들을 추가해야 합니다:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.FileExtensions;
using Microsoft.Extensions.Configuration.Json;
using System.IO;
또는 .csproj에 필요한 NuGet 패키지가 포함되어 있는지도 확인하세요:
필요한 NuGet 패키지
- Microsoft.Extensions.Configuration
- Microsoft.Extensions.Configuration.Json
- Microsoft.Extensions.Configuration.FileExtensions
이렇게 설치할 수 있어요:
dotnet add package Microsoft.Extensions.Configuration
dotnet add package Microsoft.Extensions.Configuration.Json
dotnet add package Microsoft.Extensions.Configuration.FileExtensions
이제 Oracle DB에 LINQ로 접근할 수 있도록 Entity Framework Core (EF Core) 를 세팅하기!!!
✅ 전체 흐름
- NuGet 패키지 설치
- DbContext, Model 클래스 생성
- Oracle 연결 설정 (appsettings.json)
- LINQ로 데이터 조회
✅ 1단계: NuGet 패키지 설치
🔹 필수 패키지 목록 (프로젝트에서 설치)
- Oracle.EntityFrameworkCore
- Microsoft.Extensions.Configuration
- Microsoft.Extensions.Configuration.Json
- Microsoft.Extensions.DependencyInjection
🔸 설치 방법
방법 1: NuGet 패키지 매니저 (GUI)
- 프로젝트 우클릭 → NuGet 패키지 관리 → 위 패키지들 검색 & 설치
방법 2: 패키지 콘솔
dotnet add package Oracle.EntityFrameworkCore
dotnet add package Microsoft.Extensions.Configuration
dotnet add package Microsoft.Extensions.Configuration.Json
dotnet add package Microsoft.Extensions.DependencyInjection
✅ 2단계: Oracle 모델 클래스 및 DbContext 만들기
🔹 예시: Employee 모델
public class Employee
{
public int EmployeeId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int? DepartmentId { get; set; }
}
🔹 DbContext 클래스
using Microsoft.EntityFrameworkCore;
public class OracleDbContext : DbContext
{
public OracleDbContext(DbContextOptions<OracleDbContext> options)
: base(options)
{
}
public DbSet<Employee> Employees { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Employee>(entity =>
{
entity.ToTable("EMPLOYEES"); // Oracle 테이블 이름
entity.HasKey(e => e.EmployeeId);
entity.Property(e => e.EmployeeId).HasColumnName("EMPLOYEE_ID");
entity.Property(e => e.FirstName).HasColumnName("FIRST_NAME");
entity.Property(e => e.LastName).HasColumnName("LAST_NAME");
entity.Property(e => e.DepartmentId).HasColumnName("DEPARTMENT_ID");
});
}
}
✅ 3단계: appsettings.json 설정
{
"ConnectionStrings": {
"OracleDb": "User Id=your_user;Password=your_password;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)));"
}
}
✅ 4단계: Program.cs에서 LINQ로 조회
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.EntityFrameworkCore;
class Program
{
static void Main(string[] args)
{
// 1. Configuration 읽기
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var services = new ServiceCollection();
// 2. DbContext 등록
services.AddDbContext<OracleDbContext>(options =>
options.UseOracle(config.GetConnectionString("OracleDb")));
var serviceProvider = services.BuildServiceProvider();
// 3. LINQ로 Oracle 데이터 조회
using (var context = serviceProvider.GetRequiredService<OracleDbContext>())
{
var employees = context.Employees
.Where(e => e.DepartmentId == 10)
.ToList();
foreach (var emp in employees)
{
Console.WriteLine($"{emp.FirstName} {emp.LastName}");
}
}
}
}
✅ 정리
✅ 다음에 해볼 수 있는 것
- 여러 테이블 관계 (Navigation Properties)
- CRUD (추가/수정/삭제)
- 마이그레이션을 통한 테이블 자동 생성 (주의: Oracle은 복잡함)
- Repository 패턴 적용
+ Oracle 설치
어제부터 ORACLE 설치는 그냥 계속 [다음]만 클릭하고 [비밀번호]만 설정하면 되어가지고 별거 없었는데...
dbeavor로 열고 싶은데 안 열리는게 너무 짜증이 났다... 이거가지고 하루를 고생한듯... 무지가 죄다...
결론부터 말하자면 나는 dbeavor에서 연결할 때 아래와 같이 했는데
이 로컬호스트 문제가 있었다...
구글링해보니
C:\app\[컴퓨터사용자]\product\21c\homes\OraDB21Home1\network\admin
이 경로에 있는 listener.ora 에는
# listener.ora Network Configuration File: C:\app\[사용자컴퓨터]\product\21c\homes\OraDB21Home1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
DEFAULT_SERVICE_LISTENER = XE
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = XE)
(ORACLE_HOME = C:\app\[사용자컴퓨터]\product\21c\dbhomeXE)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\[사용자컴퓨터]\product\21c\dbhomeXE)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\[사용자컴퓨터]\product\21c\dbhomeXE\bin\oraclr.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.153)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
이렇게 입력이 되어있는데 아래의 HOST= 192.168.0.153에 들어가도록 설정해놓고 나는 계속 localhost에 들어가려고 했다...
아 하루를 이런 걸로 날리다니...
그래도 잘 접속되는거 확인하고
이렇게 하니까 Test Connection 했을때 잘 된다.
'c#' 카테고리의 다른 글
C# [17] 모르는 세계... 그렇지만 계속 알아가야 할...연휴에 고민 중 (2) | 2025.05.03 |
---|---|
C# [16] ORACLE (0) | 2025.04.10 |
C# [14] 로그인 창 만들기 (0) | 2025.04.08 |
C# [13] Winform (0) | 2025.04.08 |
C# [12] 예외처리 (0) | 2025.04.08 |