ADO.Net-Oracle 데이터베이스에 대한 작업


일아디오Net 소개
데이터베이스에 접근하는 기술은 매우 많은데 흔히 볼 수 있는 것은 오픈 데이터베이스 호환(ODBC), 데이터 접근 대상(DAO), 원격 데이터 대상(RDO),ActiveX 데이터 대상(ADO)이다.저희는 오늘 주로 아디오를 공부할 거예요.NET에서 OracleClient 네임스페이스의 공통 객체 수NET 인식 학습의 시작.
ADO와 ADO.NET는 비슷하면서도 차이점이 있다. 그들은 데이터베이스 서버의 데이터에 접근하고 조작하는 응용 프로그램을 작성할 수 있고 사용하기 쉽고 고속도, 낮은 메모리 지출과 디스크 공간을 적게 차지하며 클라이언트/서버와 웹 기반 응용 프로그램의 주요 기능을 지원한다.그러나 ADO는 OLE DB 인터페이스를 사용하고 마이크로소프트의COM 기술을 바탕으로 한다.NET만의 아디오를 가지고 있습니다.NET 인터페이스 및 Microsoft 기반NET 아키텍처모두가 다 알고 있다.NET 아키텍처는 COM 아키텍처와 다릅니다.NET 인터페이스도 ADO와 OLE DB 인터페이스와 완전히 다르다. 이것이 바로 ADO다.NET 는 입니다.NET 프레임워크는 최적화된 데이터 접근 모델을 제공하고COM 기반의 ADO와 완전히 다른 데이터 접근 방식이다.
ADO.NET는 데이터 원본에 액세스하는 개체를 위한 클래스 라이브러리입니다.간단하게 이해하자면 데이터 원본은 데이터베이스이며 텍스트 파일, Excel 표 또는 XML 파일도 할 수 있다.ADO.NET에는 데이터와 전문적으로 접촉하는 대상들이 많이 포함되어 있다.다음은 가장 자주 사용하는 대상들을 소개한다.이 대상은 공부 아디오입니다.NET가 알아야 할 건이것들을 파악한 후에 우리는 ADO를 사용할 줄 알게 될 것이다NET와 데이터 접촉은 어떤 것들을 고려해야 합니까?
OracleConnection 객체
데이터 원본에 접근하려면 먼저 연결해야 합니다.이 연결에는 데이터베이스 서버 유형, 데이터베이스 이름, 사용자 이름, 비밀번호, 그리고 데이터베이스 연결에 필요한 다른 매개 변수가 기술되어 있다.command 대상은connection 대상을 사용하여 어느 데이터베이스에서 ORACLE 명령을 실행하는지 알 수 있습니다.
OracleConnection oracleConn = new OracleConnection();
oracleConn.ConnectionString = "User Id=scott;Password=tiger;Data Source=oracleSN;";
oracleConn.Open();

OracleCommand 객체
데이터베이스에 연결하면 실행하고자 하는 데이터베이스 조작을 시작할 수 있습니다. 이것은command 대상을 통해 완성됩니다. command 대상은 일반적으로 ORACLE 문구를 데이터베이스에 보내는 데 사용됩니다.command 대상은connection 대상을 통해 어느 데이터베이스와 연결해야 하는지 알아야 합니다.우리는command 대상으로 ORACLE 명령을 직접 실행할 수도 있고,command 대상의 인용을 Oracle Data Adapter에 전달할 수도 있습니다. Oracle Data Adapter는 일련의command 대상을 포함하여 대량의 데이터를 처리할 수 있습니다.
public void ReadMyData(string connectionString)
{
string queryString = "SELECT EmpNo, DeptNo FROM Scott.Emp";
OracleConnection connection = new OracleConnection(connectionString)
{
OracleCommand command = new OracleCommand(queryString, connection);
connection.Open();
OracleDataReader reader = command.ExecuteReader();
try
{
while (reader.Read())
{
Console.WriteLine(reader.GetInt32(0) + ", " + reader.GetInt32(1));
}
}
finally
{
reader.Close();
}
}
}

OracleDataReader 객체
많은 데이터베이스 조작은 우리가 단지 하나의 데이터를 읽어야만 한다고 요구한다.이때 데이터 리더 대상을 사용했다.데이터 리더 대상을 통해command 대상의 SELECT 문구에서 얻은 결과를 얻을 수 있습니다.성능 측면의 요소를 고려하여 데이터 리더가 되돌아오는 데이터 흐름은 읽기 전용, 단방향으로 설계되어 일정한 순서에 따라 데이터 흐름에서 데이터를 꺼낼 수 있음을 의미한다.여기서도 성능이 향상되었지만 단점도 뚜렷하다. 데이터를 되찾을 수 없기 때문에 데이터를 편집할 필요가 있다면 DataSet을 사용하는 것이 해결책이다.OracleDataReader는 데이터를 읽을 때 데이터 테이블의 데이터를 데이터 형식에 따라 선별할 수 있는 몇 가지 방법을 제공합니다: GetDateTime, GetDouble, GetGuid, GetInt32.
DataSet 객체
DataSet 객체는 메모리에 저장된 데이터를 나타내는 데 사용됩니다.이것은 여러 개의 DataTable 대상을 포함하는데 DataTable는 일반적인 데이터베이스에 있는 테이블처럼 줄과 열도 있고 테이블과 테이블 사이의 관계를 정의함으로써 종속성을 만들 수 있다.DataSet은 메모리에 저장된 데이터와 데이터 분리 작업을 관리하는 데 주로 사용됩니다.DataSet 객체는 모든 Data Providers (데이터 소스가 상호작용하는 클래스 라이브러리) 에서 사용할 수 있기 때문에 접두사를 지정할 필요가 없습니다.
OracleDataAdapter 객체
때때로 우리는 데이터만 읽을 수 있고, 변경 사항을 데이터 원본에 다시 쓸 필요가 없다.그러나 데이터베이스 호출 횟수를 줄이기 위해 우리는 데이터를 메모리에 저장한다.Data adapter는 모델을 분리하여 후면 상황을 쉽게 처리합니다.데이터베이스에 대한 읽기와 쓰기를 대량으로 완성하고 데이터베이스에 다시 쓸 때 데이터 adapter는 데이터 세트 대상을 채웁니다.데이터 어댑터에는connection 대상이 포함되어 있으며 데이터 원본을 읽거나 쓸 때 데이터 어댑터가 자동으로 연결을 열거나 닫습니다.이 밖에 데이터 adapter에는 데이터의 SELECT, INSERT, UPDATE와 DELETE 작업에 대한command 대상 인용도 포함되어 있다.만약 우리가 DataSet의 모든 테이블을 데이터 adapter로 지정한다면, 이것은 연결 처리 데이터베이스와의 모든 작업을 처리할 수 있도록 도와줄 것입니다. 우리가 해야 할 일은 데이터 adapter가 언제 데이터베이스에 읽거나 쓸 것인지를 알려주는 것입니다.
2C#로 데이터베이스 프로그램 연결을 작성하려면
프로그램에서 System을 사용하십시오.Data.OracleClient 네임스페이스의 클래스 하위 집합을 Oracle 데이터베이스에 적용하려면 다음과 같이 하십시오.
1、시스템을.Data.OracleClient(Oracle의 Microsoft.NET 프레임워크 데이터 제공자)에 대한 참조가 프로젝트에 추가됩니다.
2. using 명령을 사용하여 OracleClient 클래스의 유형을 가져옵니다.
using System.Data.OracleClient; 3. OracleConnection 객체를 만듭니다.
OracleConnection conn = new OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;");
4. OracleCommand 객체를 만듭니다.Connection 속성을 이전 단계에서 생성한 연결로 설정합니다.CommandText를 데이터베이스 테이블에 대한 작업, 즉 SQL 문구로 설정합니다.
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "select * from table";
5. OracleParameter 객체를 만들고 OracleCommand 객체의 매개변수 컬렉션에 추가합니다.(CommandText에 매개변수가 있는 경우 이 개체를 만들어야 함)
cmd.Parameters.Add("reccount",OracleType.Number);
6, 작업의 결과 집합을 찾으려면 DataSet, DataTable 또는 DataReader를 만듭니다.
7. OracleCommand 대상의 Execute 방법을 사용하여 CommandText의 SQL 문장을 다음과 같이 실행한다.
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();

Execute 메서드 설명
ExecuteReader를 실행하면 결과 세트를 반환하여 OracleDataReader를 생성할 수 있습니다.
ExecuteNonQuery 실행은 영향을 받은 행 수를 반환합니다.
Execute Oracle NonQuery Oracle Command.Connection에서 SQL 문을 실행하면 해당 행 수가 반환됩니다.
ExecuteScalar에서 질의를 수행하고 질의 결과 세트의 첫 번째 행의 첫 번째 열에 대한 값을 로 반환합니다.NET 프레임 데이터 유형이 반환됩니다.
ExecuteOracleScalar에서 질의를 수행하고 질의 결과 세트의 첫 번째 행의 첫 번째 열 값을 Oracle 지정 유형(OracleType 데이터 유형)으로 반환합니다.
 
3 상세 운영 요약
1. 두 가지 데이터베이스 연결:
첫 번째: 기존의 방법(융통성 없는 조작), 즉 OracleConnection의 클래스로 연결하는 것
string myOraclestr ="user id = xal;data source = xal;password = xal";
OracleConnection mycnn = new OracleConnection(myOraclestr);
mycnn.open();

두 번째: 새로운 방법(유연한 사용), 즉 OracleConnectoinStringBuilder 클래스를 이용하여 연결하는 것
 OracleConnectionStringBuilder OcnnStrB = new OracleConnectionStringBuilder();
OCnnStrB.DataSource = "xal";
OCnnStrB.UserID = "xal";
OCnnStrB.Password = "xal";
OracleConnection myCnn = new OracleConnection(OCnnStrB.ConnectionString);
myCnn.open();

2. 데이터베이스 테이블 작업
2.1 데이터베이스 테이블의 조회, 추가, 삭제 및 수정
첫 번째: OracleDataAdapter 클래스 활용
 string Oraclestr = "select name from telephonebook "; 
OracleDataAdapter myoadapt = new OracleDataAdapter(Oraclestr, myConnection);

두 번째: OracleCommand 클래스 활용
 string Oraclestr = "delete from telephonebook"; 
OracleCommand myocmd = new OracleCommand(Oraclestr, myConnection);
myocmd.ExecuteNonQuery();

세 번째: OracleCommand의 CommandText 속성 활용
 
 OracleCommand myConnection = new OracleCommand();
Comm.Connection = myConnection;
Comm.Transaction = myConnection.BeginTransaction();
Comm.CommandText = "select * from table";
Comm.ExecuteNonQuery();
Comm.Transaction.Commit();

2.2 데이터 세트 탐색
string Oraclestr = "select name from telephonebook ";
OracleDataAdapter myoadapt = new OracleDataAdapter(Oraclestr, myConnection);
DataTable mydtable = new DataTable();
myoadapt.Fill(mydtable);
foreach (DataRow dr in mydtable.Rows)
{
comboBox1.Items.Add(dr[0].ToString());
}

2.3 사무의 조작.
데이터베이스 업무는 하나의 논리 작업 단원으로 집행되는 일련의 조작을 가리킨다.
치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치얼치
• 고객이 구입한 품목의 재고 정보 업데이트
• 고객 결제 정보 저장 - 은행 시스템과의 상호 작용이 포함될 수 있음
• 주문 생성 및 데이터베이스에 저장
• 쇼핑 수량 등 사용자 관련 정보 업데이트
치얼치얼이 정상적인 상황에서 이런 조작은 순조롭게 진행되고 최종 거래가 성공하며 거래와 관련된 모든 데이터베이스 정보도 성공적으로 업데이트될 것이다.그러나 만약에 이 일련의 과정에서 어떤 부분에서 착오가 발생한다면 예를 들어 상품 재고 정보를 갱신할 때 이상이 발생하고 이 고객의 은행 계좌 예금이 부족하면 거래 실패를 초래할 것이다.거래가 실패하면 데이터베이스에 있는 모든 정보는 거래 전의 상태를 유지해야 한다. 예를 들어 마지막 단계에서 사용자 정보를 업데이트할 때 실패하여 거래가 실패하면 이 실패한 거래가 데이터베이스 상태에 영향을 주지 않는다는 것을 보증해야 한다. 즉, 재고 정보가 업데이트되지 않았고 사용자도 돈을 지불하지 않았으며 주문서도 생성되지 않았다.그렇지 않으면 데이터베이스 정보는 혼란스러워 예측할 수 없을 것이다.이러한 상황에서 거래의 안정성과 예측성을 확보하는 데 사용되는 기술이다.
 

//
string myConnString = "user id=xal;data source=xal2;password=xal";
OracleConnection myConnection = new OracleConnection(myConnString);
myConnection.Open();
{
//
OracleTransaction myTransaction = myConnection.BeginTransaction();
OracleCommand myocmd = new OracleCommand("", myConnection);
myocmd.Transaction = myTransaction;
try
{
//
myTransaction.Commit();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
myTransaction.Rollback();
}
finally
{
myConnection.Close();
}
}

2.4 데이터 테이블에서 이미지 데이터를 읽고 데이터베이스에서 이미지 데이터를 추출하여 2진수로 저장한 다음에 지정한 컨트롤에 표시한다.
byte[] tmpImage = (byte[])curRow["Pic"];
// fileLength ( ) curImageFormat 。
fileLength = tmpImage.Length;
MemoryStream curStream = new MemoryStream(tmpImage);
picPersonel.Image = Image.FromStream(curStream);
curImageFormat = picPersonel.Image.RawFormat;

2.5 명령 매개변수 생성 및 사용
명령 매개변수 생성하기
private OracleParameter CreateOraParam(string ParamName, object ParamValue)
{
OracleParameter Result = new OracleParameter();
Result.ParameterName = ParamName;
if (ParamValue != null)
{
Result.Value = ParamValue;
}
else
{
Result.Value = DBNull.Value;
}
Result;
}

이렇게 하면 데이터베이스를 조작할 때 다음과 같은 효과를 사용할 수 있다.
insertComm.CommandText = "insert into TESTADODOTNET (ID) values (:pID)";
insertComm.Parameters.Add(CreateOraParam("pID", (txtID.Text.Trim() != "") ? txtID.Text.Trim() : null));

좋은 웹페이지 즐겨찾기