본문 바로가기

ASP.NET

[ASP.NET] asp.net 에서 oracle 공급자를 사용할 경우 long type 처리 방법

asp.net 에서 oracle 에 연결하는 방법은 여러가지가 있는데 평소에 쓰던 방법에서 본의 아니게 Data Provider 를 변경해야
되는 상황이 되어 버렸습니다.

보통은 아래와 같은 방법으로 Oracle DB 연결에 대한 부분을 처리 하는데

Imports System.Data.OleDb

Dim DbCon As New OleDbConnection(Common.ConnectionString)
Dim cmd As OleDbCommand
Dim reader As OleDbDataReader

서버에 Oracle 10g client 를 설치하고 ODT with ODAC 11g 를 추가로 설치 했더니 DB 를 찾아가지를 못하더군요.
그래서 부랴부랴 DB 연결 부분을 MS 제공하는 공급자가 아닌 Oracle 에서 제공하는 공급자로 변경을 했는데 컬럼 타입이
long 타입 컬럼이 에러는 나지 않는데 데이터가 보이지가 않습니다.

구글신의 도움으로 해결은 했는데 해결방법이 의외로 간단합니다. ㅡ_ㅡ;

변경된 코드 입니다.
Imports Oracle.DataAccess.Client

Dim DbCon As New OracleConnection(Common.ConnectionString)
Dim cmd As OracleCommand
Dim reader As OracleDataReader
Dim sql As String

DbCon.Open()
sql = " SELECT longType컬럼 from 테이블 "
cmd = New OracleCommand(sql, DbCon)
cmd.InitialLONGFetchSize = 1000 '추가된 코드 
reader = cmd.ExecuteReader()

위처럼 한줄 추가해주니 정상적으로 데이터 출력을 해줍니다. ㅜ_ㅜ
참고로 위 코드에 DB 연결 문자열도 Data Provider 에 따라 내용이 달라 집니다. 모두 한줄로 적어 주면 됩니다.

MS for Oracle Provider
Provider=MSDAOra.Oracle;User Id=계정;Password=비밀번호;
Data Source=DB이름;OLEDB.NET=True;SPPrmsLOB=False;NDatatype=False;

Oracle Provider 10g
Provider=OraOLEDB.Oracle.1;Password=비밀번호;Persist Security Info=True;User ID=계정;Data Source=DB이름

Oracle Provider 11g (정확히는 ODT with ODAC 11g)
DATA SOURCE=DB이름;PERSIST SECURITY INFO=False;USER ID=계정;Password=비밀번호