[윈도우7/64비트]C#,Oracle11g,ODP.NET,ODAC설, Windows7,64bit
0. 먼저 Oracle Client 64 비트를 설치하자.
1. ODP.NET을 위한 ODAC*.zip 파일 다운로드( http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html 에서 Oracle 버전을 확인하고 zip 파일을 다운받아 압축을 풀자.)
2. 오라클 클라이언트 또는 서버가 설치되어 있다면 해당폴더를 사용하면 된다.
저는 오라클 클라이언트가 설치되어 있어 그 폴더를 사용했습니다. c:\app\ooo\product\11.2.0\client_1)
압축을 풀고 install.bat 파일이 있는 곳에서(관리자 권한으로 명령프롬프트 실행)
-- ODAC 전체 설치
c:\install.bat있는경로> install.bat all C:\app\ooo\product\11.2.0\client_1 odac
-- ODP.NET DLL을 전역어셈블리 캐시에 등록
c:\install.bat있는경로\odp.net4\odp.net\bin\4> OraProvCfg.exe /action:gac /providerpath:C:\app\ooo\product\11.2.0\client_1\odp.net\bin\4\Oracle.DataAccess.dll
-- ASP.NET용 ODP.NET을 전역어셈블리 캐시에 등록
c:\install.bat있는경로\asp.net4\asp.net\bin\4> OraProvCfg.exe /action:gac /providerpath:C:\app\ooo\product\11.2.0\client_1\asp.net\bin\4\Oracle.Web.dll
3. 환경변수 PATH에 다음을 추가
c:\app\ooo\product\11.2.0\client_1;c:\app\ooo\product\11.2.0\client_1\bin
4. 간단하게 ODP.NET 예제를 작성하자.
* 프로젝트 속성에서 build -> platform target을 "X86"에서 "ANY CPU" 반드시 변경할 것
변경하지 않으면 아래 오류발생!!
변경하지 않으면 아래 오류발생!!
Unhandled Exception: System.BadImageFormatException: Could not load file or assembly
'Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies
. 프로그램을 잘못된 형식으로 로드하려고 했습니다.
at ConsoleApplication7.Program.Main(String[] args)
'Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies
. 프로그램을 잘못된 형식으로 로드하려고 했습니다.
at ConsoleApplication7.Program.Main(String[] args)
1. C:\app\ooo\product\11.2.0\client_1\odp.net\bin에서 Oracle.DataAccess.dll을 프로젝트 bin 아래로 복사하거나 참조추가하세요.
2. 접속하고자 하는 DB를 기술한 C:\app\ooo\product\11.2.0\client_1\NETWORK\ADMIN\tnsnames.ora 파일을 작성
ONJ =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.27)(PORT=1521))
)
(CONNECT_DATA =
(SERVICE_NAME = onj)
)
)
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.27)(PORT=1521))
)
(CONNECT_DATA =
(SERVICE_NAME = onj)
)
)
[예제]
using System;
using System.Data;
using Oracle.DataAccess.Client;
using System.Data;
using Oracle.DataAccess.Client;
namespace ConsoleApplication7
{
class Program
{
static void Main(string[] args)
{
//아래에서 data source의 onj는 tnsnames.ora 파일의 DB접속이름이다.
string str = "data source=onj;user id=scott; password=tiger";
OracleConnection Conn = new OracleConnection(str);
OracleCommand Comm;
Comm = new OracleCommand();
Comm.Connection = Conn;
try
{
Conn.Open();
Comm.CommandText = "SELECT ENAME FROM EMP";
OracleDataReader reader = Comm.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(reader.GetString(reader.GetOrdinal("ENAME")));
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
Conn.Close();
}
}
}
}
{
//아래에서 data source의 onj는 tnsnames.ora 파일의 DB접속이름이다.
string str = "data source=onj;user id=scott; password=tiger";
OracleConnection Conn = new OracleConnection(str);
OracleCommand Comm;
Comm = new OracleCommand();
Comm.Connection = Conn;
try
{
Conn.Open();
Comm.CommandText = "SELECT ENAME FROM EMP";
OracleDataReader reader = Comm.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(reader.GetString(reader.GetOrdinal("ENAME")));
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
Conn.Close();
}
}
}
}
[결과]
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
댓글 없음:
댓글 쓰기