White Whale Studio

C# Oracle OleDB 연동 본문

IT Engineering/C#.net

C# Oracle OleDB 연동

glorymind 2020. 8. 14. 09:20
반응형

생각보다 구글링 했을떄 OleDB 연동 자료가 없어서 생각보다 시간이 좀 오래걸렸다.

외국문헌 보면서 하다보니 상황에 안맞는 코드들도 많고.. 이리저리 해보다가 정상동작하는게 있어서 

다음과 같이 정리한다.

1. Connection

2. DataSet Results를 받는 쿼리 실행

3. DataSet Results를 받지않는 쿼리 실행

4. Procedure 실행

위와 같이 기록한다.

 

1. Connection

정말 별거 아닌데 ConnectionString을 제대로 못잡아서 안되는 경우가 종종있었다.

(그래서 짜증...)

1
ConnectionString = string.Format("Provider=OraOLEDB.Oracle;Data Source={0};User ID={1};Password={2};PLSQLRSet=true;", Catalog, UserId, UserPwd);            
cs

위와같이 설정하고 상황에 맞춰서 Catalog, ID, PW를 넣고 연결문자를 준비한다.

쿼리 실행 때 사용하므로 다음으로 진행한다.

 

2. DataSet Results 를 받는 쿼리 실행

Select의 결과값을 DataSet으로 받는 쿼리 메서드다.

조건이 되는 파라미터를 OleDBParameter로 넘겨서 추가해서 실행한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 using (OleDbConnection conn = new OleDbConnection(connectionString))
                    {
                        conn.Open();
                        using (OleDbCommand cmd = new OleDbCommand(cmdText, conn))
                        {
                            cmd.CommandType = CommandType.Text;
                            cmd.Parameters.Clear();
 
                            if (null != collection)
                            {
                                foreach (OleDbParameter param in collection)
                                {
                                    if (null != param)
                                        cmd.Parameters.Add(param);
                                }
                            }
 
                            using (OleDbDataAdapter adapter = new OleDbDataAdapter(cmd))
                            {
                                adapter.Fill(ds);
                            }
                        }
                    }
cs

3. DataSet Results를 받지않는 쿼리 실행

DataSet으로 결과를 받지는 않고 쿼리 실행결과의 단일결과값으로만 받는 소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 using (OleDbConnection conn = new OleDbConnection(connectionString))
                {
                    conn.Open();
                    using (OleDbCommand cmd = new OleDbCommand(procedureName, conn))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.Clear();
 
                        if (null != collection)
                        {
                            foreach (OleDbParameter param in collection)
                            {
                                if (null != param)
                                    cmd.Parameters.Add(param);
                            }
                        }
 
                        cmd.ExecuteNonQuery();
 
                        if (returnParam.Length > 0) results = cmd.Parameters[returnParam].Value.ToString();
                    }
                }
cs

 

4. Procedure 실행

프로시저도 거의 유사하지만 CommandType을 다르게 해서 실행한다는것이 차이점

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using (OleDbConnection conn = new OleDbConnection(connectionString))
                    {
                        conn.Open();
                        using (OleDbCommand cmd = new OleDbCommand(procedureName, conn))
                        {
                            cmd.CommandType = CommandType.StoredProcedure;
                            cmd.Parameters.Clear();
 
                            if (null != collection)
                            {
                                foreach (OleDbParameter param in collection)
                                {
                                    if (null != param)
                                        cmd.Parameters.Add(param);
                                }
                            }
 
                            using (OleDbDataAdapter adapter = new OleDbDataAdapter(cmd))
                            {
                                adapter.Fill(ds);
                            }
 
                        }
                    }
cs

 

 

반응형
Comments