현재 위치 - 중국 분류 정보 발표 플랫폼 - 비즈니스 서비스 정보 - VC 에서 ADO 를 사용하여 LAN SQL Server 데이터베이스에 연결하는 방법

VC 에서 ADO 를 사용하여 LAN SQL Server 데이터베이스에 연결하는 방법

첫째, ADO 개요

ADO 는 최신 및 가장 강력한 데이터 액세스 샘플 OLE DB 를 위해 설계된 Microsoft 로 사용하기 쉬운 애플리케이션 계층 인터페이스입니다. ADO 를 사용하면 OLE. DB 공급자를 통해 데이터베이스 서버의 데이터에 액세스하고 조작하는 응용 프로그램을 작성할 수 있습니다. ADO 의 가장 큰 장점은 사용 편의성, 속도, 메모리 지출 감소, 디스크 유적이 적다는 것입니다. ADO 는 핵심 애플리케이션 시나리오에서 최소한의 네트워크 트래픽을 사용하고 프런트엔드와 데이터 소스 간에 최소 계층 수를 사용합니다. 이 모든 것이 경량의 고성능 인터페이스를 제공하기 위한 것입니다. ADO 라고 불리는 것은 비교적 익숙한 은유인 OLE 자동화 인터페이스를 사용한 것이다.

OLE DB 는 ODBC 의 기능을 캡슐화하고 서로 다른 정보 소스에 저장된 데이터에 일관되게 액세스하는 새로운 데이터베이스 하위 계층 인터페이스인 COM (Component Object Model) 인터페이스 세트입니다. OLE DB 는 Microsoft uda (universal data access) 전략의 기술적 기반입니다. OLE DB 는 관계형 및 비관계형 데이터베이스, e-메일 및 파일 시스템, 텍스트 및 그래픽, 맞춤형 비즈니스 객체 등 모든 데이터 소스에 대한 고성능 액세스를 제공합니다. 즉, OLE DB 는 ISAM, Jet 및 관계형 데이터 소스에만 국한되지 않으며 형식 및 저장 방법에 관계없이 모든 유형의 데이터를 처리할 수 있습니다. 실제 애플리케이션에서 이러한 다양성은 Excel 스프레드시트, 텍스트 파일, e-메일/디렉토리 서비스, 심지어 Microsoft Exchange 에 상주하는 데이터와 같은 메일 서버까지 액세스할 수 있음을 의미합니다. 그러나 OLE DB 응용 프로그램 프로그래밍 인터페이스의 목적은 다양한 응용 프로그램에 최상의 기능을 제공하는 것으로, 단순한 요구 사항을 충족하지 못합니다. 필요한 API 는 ActiveX Data Objects (ADO) 와 OLE DB 를 연결하는 다리여야 합니다.

둘째, VC 에서 ADO 사용 (개발 단계는 다음과 같습니다.)

1, ADO 라이브러리 파일 가져오기

ADO 를 사용하기 전에 프로젝트의 stdafx.h 헤더 파일에 직접 가져오기 기호 #import 를 사용하여 ADO 라이브러리 파일을 가져와야 컴파일러가 제대로 컴파일됩니다. 코드는 다음과 같습니다.

#import 를 사용하여 ADO 라이브러리 파일 가져오기

# import "c: \ program files \ common files \ system \ ado \ msado15.dll" no _ namespaces rename "

이 문은 엔지니어링에서 ADO 를 사용하지만 ADO 의 네임스페이스는 사용하지 않으며 상수 충돌을 피하기 위해 상수 EOF 를 adoEOF 로 변경합니다. 이제 다른 헤더 파일을 추가하지 않고도 ADO 인터페이스를 사용할 수 있습니다.

2, OLE/COM 라이브러리 환경 초기화

ADO 라이브러리는 COM 동적 라이브러리 세트입니다. 즉, ADO 를 호출하기 전에 응용 프로그램이 OLE/COM 라이브러리 환경을 초기화해야 합니다. MFC 응용 프로그램에서 더 좋은 방법은 응용 프로그램 마스터 클래스의 InitInstance 멤버 함수에서 OLE/COM 라이브러리 환경을 초기화하는 것입니다.

Bool cmyadotestapp:: initinstance ()

{

If (! AfxOleInit())///이것은 COM 라이브러리 초기화

입니다

{

AfxMessageBox(“OLE 초기화 오류! "" );

Return FALSE;;

}

……

}

3, ADO 인터페이스 소개

ADO 라이브러리에는 _ConnectionPtr 인터페이스, _CommandPtr 인터페이스 및 _RecordsetPtr 인터페이스의 세 가지 기본 인터페이스가 포함되어 있습니다.

_ConnectionPtr 인터페이스는 레코드세트나 빈 포인터를 반환합니다. 일반적으로 데이터 연결을 만들거나 결과를 반환하지 않는 SQL 문 (예: 저장 프로시저) 을 실행하는 데 사용됩니다. _ConnectionPtr 인터페이스를 사용하여 레코드세트를 반환하는 것은 좋은 사용 방법이 아닙니다. 레코드를 반환하는 작업은 일반적으로 _RecordserPtr 을 사용하여 수행됩니다. _ConnectionPtr 로 작업할 때 레코드 막대 수를 얻으려면 모든 레코드를 통과해야 하지만 _RecordserPtr 를 사용할 때는 필요하지 않습니다.

_CommandPtr 인터페이스는 레코드세트를 반환합니다. 레코드세트를 반환하는 저장된 프로시저와 SQL 문을 쉽게 실행할 수 있습니다. _CommandPtr 인터페이스를 사용할 때 글로벌 _ConnectionPtr 인터페이스를 이용하거나 _CommandPtr 인터페이스에서 직접 연결 문자열을 사용할 수 있습니다. 한 번 또는 몇 번의 데이터 액세스 작업만 수행할 경우 후자가 더 좋은 선택입니다. 그러나 데이터베이스에 자주 액세스하고 많은 레코드세트를 반환하려면 글로벌 _ConnectionPtr 인터페이스를 사용하여 데이터 연결을 만든 다음 _CommandPtr 인터페이스를 사용하여 저장된 프로시저와 SQL 문을 실행해야 합니다.

_RecordsetPtr 은 레코드세트 객체입니다. 위의 두 객체보다 레코드 잠금, 커서 제어 등과 같은 레코드세트에 더 많은 제어 기능을 제공합니다. _CommandPtr 인터페이스와 마찬가지로 이미 생성된 데이터 연결을 사용할 필요는 없습니다. 연결 포인터를 _RecordsetPtr 의 연결 멤버 변수에 지정하는 연결 문자열 대신 연결 문자열을 사용하여 데이터 연결을 직접 만들 수 있습니다. 여러 레코드세트를 사용하는 경우 Command 객체처럼 데이터 연결이 만들어진 전역 _ConnectionPtr 인터페이스

를 사용하는 것이 가장 좋습니다

를 누르고 _RecordsetPtr 을 사용하여 저장된 프로시저와 SQL 문을 실행합니다.

4, _ConnectionPtr 인터페이스 사용

_ConnectionPtr 은 주로 데이터베이스에 대한 연결을 얻기 위한 연결 인터페이스입니다. 연결 문자열은 직접 작성하거나 ODBC DSN 을 가리킬 수 있습니다.

_ connection ptr pconn;

If (failed (pconn.createinstance ("adodb.connection"))

{

Afxmessagebox ("create instance failed!" " );

Return;;

}

CString strSRC;;

Strsrc = "driver = SQL server; Server = ";

Strsrc+= "suppersoft";

Strsrc+= "; Database = ";

Strsrc+= "mydb";

Strsrc+= "; UID=SA;; Pwd = ";

Cstringstrsql = "insert into student (no, name, sex, address) values(3,' AAA',' male','

_ _variant_t varSRC(strSRC););

_ variant _ t varsql (strsql);

_ bstr _ t bstrsrc (strsrc);

If (FAILED(pConn-gt;-gt; 오픈 (bstrsrc, "","",",-1))

{

Afxmessagebox ("can not open database!" " );

Pconn.release ();

Return;;

}

Colevariant vtoptional ((long) disp _ e _ param not found, vt _ error);

PConn-gt;; Execute(_bstr_t(strSQL), amp;; VtOptional,-1);

Pconn.release ();

AfxMessageBox("ok! "" );

5, _RecordsetPtr 인터페이스 사용 (SQL Server 연결 예)

_ recordset ptr pptr;

If (failed (pptr.createinstance ("adodb.recordset"))

{

Afxmessagebox ("create instance failed!" " );

Return FALSE;;

}

CString strSRC;;

Strsrc = "driver = SQL server; Server = ";

Strsrc+= "210.46.141.145";

Strsrc+= "; Database = ";

StrS

Rc+= "mydb";

Strsrc+= "; UID=sa;; Pwd = ";

Strsrc+= "sa";

CString strSQL = "select id, name, gender, address from personal ";

_ _variant_t varSRC(strSRC););

_ variant _ t varsql (strsql);

If (failed (pptr-gt; Open(varSQL, varSRC, adOpenStatic, adLockOptimistic, adCmdText)))

{

AfxMessageBox("Open table failed! "" );

Pptr.release ();

Return FALSE;;

}

While (! PPtr-gt;; GetadoEOF())

{

_ variant _ tvarno;

_ variant _ t varname;

_ variant _ t varsex;

_ variant _ t varaddress;

VarNo = pPtr-gt;; Getcollect ("id");

VarName = pPtr-gt;; Getcollect ("name");

VarSex = pPtr-gt;; Getcollect ("gender");

VarAddress = pPtr-gt;; Getcollect ("address");

Cstringstrno = (char *) _ bstr _ t (varno);

Cstringstrname = (char *) _ bstr _ t (varname);

Cstringstrsex = (char *) _ bstr _ t (varsex);

Cstringstraddress = (char *) _ bstr _ t (varaddress);

Strno.trimright ();

Strname.trimright ();

Strsex.trimright ();

Straddress.trimright ();

Intncount = m _ list.getitemcount ();

Intnitem = m _ list.insertitem (ncount, _ t (""));

M_list.SetItemText (nItem, 0, strno);

M_list.SetItemText (nItem, 1, strname);

M_list.SetItemText (nItem

, 2, strsex);

M_list.SetItemText (nItem, 3, straddress);

PPtr-gt;; Movenext ();

}

PPtr-gt;; 닫기 ();

Pptr.release ();

6, _CommandPtr 인터페이스 사용

_CommandPtr 인터페이스는 Recordset 객체를 반환하고 더 많은 레코드세트 제어 기능을 제공합니다. 다음 코드 예제에서는 _CommandPtr 인터페이스를 사용하는 방법을 보여 줍니다.

코드: _CommandPtr 인터페이스를 사용하여 데이터 가져오기

_ command ptr p command;

_ recordset ptr PRS;

Pcommand.createinstance (_ _ uuidof (command));

P command-gt; ActiveConnection=pConn;;

P command-gt; Commandtext = "select * from student";

P command-gt; CommandType=adCmdText;;

P command-gt; Parameters-gt;; Refresh ();

Prs = p command-gt; Execute(NULL, NULL, adcmdunknown);

_ _variant_t varValue = pRs-gt;; GetCollect("name"); ");

Cstringstrvalue = (char *) _ bstr _ t (varvalue);

7, 데이터 유형 변환 정보 COM 객체는 플랫폼 간 것이기 때문에 다양한 유형의 데이터를 처리하는 일반적인 방법을 사용하므로 Cstring 클래스와 COM 객체는 호환되지 않습니다. COM 객체와 C++ 유형의 데이터를 변환하려면 API 세트가 필요합니다. _vatiant_t 와 _bstr_t 는 두 가지 오브젝트입니다. COM 객체와 C++ 유형의 데이터를 변환하는 일반적인 방법을 제공합니다.