우선 오라클에 여러건의 데이터를 삽입하는 방법을 알아보자.. (Blob 타입 포함)
여러건수 insert 를 위해 트랜젝션(Transaction) 처리를 하였다.
실행 도중 " ORA-01036: 잘못된 변수명/번호 " 에러가 발생하였는데 이것도 간단히 해결해 봤다.
//using System.Data.OracleClient <- 사용안함
// Blob 데이터 처리를 위해 아래의 오라클 라이브러리를 참조.
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
private Oracle.DataAccess.Client.OracleConnection m_pConn; //커넥션 개체
private String m_sConStr = "Data Source=" + TNS 이름 + ";User ID=" + 사용자아이디+ ";Password=" + 패스워드;
private Oracle.DataAccess.Client.OracleTransaction Transact; //트랜젝션
private Oracle.DataAccess.Client.OracleCommand Comm; //커맨드 객체
private void insertData()
{
//3건의 데이터가 있다고 가정한다.
// 이미지 파일이 들어가야 할 필드는 IMAGE 고 값은 :image 파라메터로 설정해 놓는다.
string[] strQuery = new strQuery[3];
strQuery[0] = "INSERT INTO AAAA( FILE_NAME, IMAGE) VALUES("이효리사진.jpg" , :image)";
strQuery[1] = "INSERT INTO AAAA( FILE_NAME, IMAGE) VALUES("이효리사진.jpg" , :image)";
strQuery[2] = "INSERT INTO AAAA( FILE_NAME, IMAGE) VALUES("이효리사진.jpg" , :image)";
m_pConn = new Oracle.DataAccess.Client.OracleConnection(m_sConStr);
m_pConn.Open();
if (m_pConn.State == ConnectionState.Open)
{
Comm = new OracleCommand();
Comm.Connection = m_pConn;
Transact = m_pConn.BeginTransaction();
try{
int cnt = 0;
foreach (string Query in strQuery)
{
Comm.CommandText = Query;
System.IO.FileStream fs =
new System.IO.FileStream(업로드할파일경로+파일이름, FileMode.Open, FileAccess.Read);
byte[] b = new byte[fs.Length - 1];
fs.Read(b, 0, b.Length);
fs.Close();
Oracle.DataAccess.Client.OracleParameter oracleParameter = new
Oracle.DataAccess.Client.OracleParameter();
oracleParameter.ParameterName = ":image";
oracleParameter.OracleDbType = OracleDbType.Blob;
oracleParameter.Direction = ParameterDirection.Input;
oracleParameter.Size = b.Length;
oracleParameter.Value = b;
Comm.Parameters.Add(oracleParameter);
Comm.ExecuteNonQuery();
Comm.Parameters.Clear(); //중요
// 단일건은 문제가 안되지만 여러건일때 파라메터를 clear 안해주면
// " ORA-01036: 잘못된 변수명/번호 " 에러 발생.
}
Transact.Commit();
}catch{
Transact.Rollback();
}
}
}
'C# & ASP.NET' 카테고리의 다른 글
C# 응용프로그램 배포시 64bit OS에서 구동 안될때..(windows7 64bit) (1) | 2011.06.15 |
---|---|
C# ORA-12154:TNS 서비스명을 ... 토드 SQLPLUS 에선 연결 되는데 소스에서 연결 안될때.. (0) | 2011.03.16 |
C#: 파일 또는 폴더(하위 폴더포함) 읽기전용 해제 (0) | 2010.12.13 |
C# 프로세스 킬하기 (Application.Exit() 를 해도 프로세스에 남아있을때..) (0) | 2010.12.07 |
C# Serial Port에서 GPS 데이터 읽기 (RS-232 Serial COM Port 사용 GPS 수신처리- NMEA 'GPGGA' 메세지) (4) | 2010.12.06 |