當前位置:首頁 » 數據倉庫 » c通用資料庫訪問類
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c通用資料庫訪問類

發布時間: 2023-01-01 02:15:49

① 計算機c語言中 什麼是資料庫

C語言與資料庫完全是兩件事情。
不存在你所謂的問題。

我想實際的問題應該如何使用C語言編程訪問資料庫吧!
這實際上是通過資料庫提供的編程介面實現的。

例如微軟公司提供了一個通用的資料庫訪問介面ODBC,它是提供了C語言的編程介面,通過它可以訪問資料庫。
或者某個具體的資料庫提供專門的編程介面。

② c/c++寫伺服器一般用什麼方式訪問資料庫的

要做伺服器端的話資料庫就是放在你的伺服器上的, 資料庫會提供相應的訪問介面, 具體使用方式可以搜一下"C++連接資料庫"之類的
http是客戶端訪問伺服器才用得到, 直接操作資料庫的總是伺服器端而不是客戶端

③ c語言訪問到異地的資料庫

你搞清楚本機的資料庫是怎麼訪問了,訪問其他的機器是一樣的
在控制面板里找到odbc管理器,在裡面創建數據源

④ C++中ADO訪問資料庫方法

一、ADO概述
ADO是Microsoft為最新和最強大的數據訪問範例 OLE DB 而設計的,是一個便於使用的應用程序層介面。ADO 使您能夠編寫應用程序以通過 OLE. DB 提供者訪問和操作資料庫伺服器中的數據。ADO 最主要的優點是易於使用、速度快、內存支出少和磁碟遺跡小。ADO 在關鍵的應用方案中使用最少的網路流量,並且在前端和數據源之間使用最少的層數,所有這些都是為了提供輕量、高性能的介面。之所以稱為 ADO,是用了一個比較熟悉的暗喻,OLE 自動化介面。

OLE DB是一組」組件對象模型」(COM) 介面,是新的資料庫低層介面,它封裝了ODBC的功能,並以統一的方式訪問存儲在不同信息源中的數據。OLE DB是Microsoft UDA(Universal Data Access)策略的技術基礎。OLE DB 為任何數據源提供了高性能的訪問,這些數據源包括關系和非關系資料庫、電子郵件和文件系統、文本和圖形、自定義業務對象等等。也就是說,OLE DB 並不局限於 ISAM、Jet 甚至關系數據源,它能夠處理任何類型的數據,而不考慮它們的格式和存儲方法。在實際應用中,這種多樣性意味著可以訪問駐留在 Excel 電子數據表、文本文件、電子郵件/目錄服務甚至郵件伺服器,諸如 Microsoft Exchange 中的數據。但是,OLE DB 應用程序編程介面的目的是為各種應用程序提供最佳的功能,它並不符合簡單化的要求。您需要的API 應該是一座連接應用程序和OLE DB 的橋梁,這就是 ActiveX Data Objects (ADO)。

二、在VC中使用ADO(開發步驟如下:)

1、引入ADO庫文件

使用ADO前必須在工程的stdafx.h頭文件里用直接引入符號#import引入ADO庫文件,以使編譯器能正確編譯。代碼如下所示:

用#import引入ADO庫文件

#import "c:\program files\common files\system\ado\msado15.dll"no_namespaces rename("EOF" adoEOF")

這行語句聲明在工程中使用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的connection成員變數,讓它自己創建數據連接。如果你要使用多個記錄集,最好的方法是同Command對象一樣使用已經創建了數據連接的全局_ConnectionPtr介面
,然後使用_RecordsetPtr執行存儲過程和SQL語句。

4、使用_ConnectionPtr介面
_ConnectionPtr主要是一個連接介面,取得與資料庫的連接。它的連接字元串可以是自己直接寫,也可以指向一個ODBC DSN。

_ConnectionPtr 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=";

CString strSQL = "Insert into student(no,name,sex,address) values(3,'aaa','male','beijing')";

_variant_t varSRC(strSRC);
_variant_t varSQL(strSQL);
_bstr_t bstrSRC(strSRC);

if (FAILED(pConn->Open(bstrSRC,"","",-1)))
{
AfxMessageBox("Can not open Database!");
pConn.Release();
return;
}

COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);

pConn->Execute(_bstr_t(strSQL),&vtOptional,-1);

pConn.Release();

AfxMessageBox("ok!");

5、使用_RecordsetPtr介面(以連接SQL Server為例)

_RecordsetPtr 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=";
strSRC+="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->Open(varSQL,varSRC,adOpenStatic,adLockOptimistic,adCmdText)))
{
AfxMessageBox("Open table failed!");
pPtr.Release();
return FALSE;
}

while(!pPtr->GetadoEOF())
{
_variant_t varNo;
_variant_t varName;
_variant_t varSex;
_variant_t varAddress;

varNo = pPtr->GetCollect ("id");
varName = pPtr->GetCollect ("name");
varSex = pPtr->GetCollect ("gender");
varAddress = pPtr->GetCollect ("address");

CString strNo =(char *)_bstr_t(varNo);
CString strName =(char *)_bstr_t(varName);
CString strSex =(char *)_bstr_t(varSex);
CString strAddress =(char *)_bstr_t(varAddress);

strNo.TrimRight();
strName.TrimRight();
strSex.TrimRight();
strAddress.TrimRight();

int nCount = m_list.GetItemCount();
int nItem = 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->MoveNext();
}

pPtr->Close();
pPtr.Release();

6、使用_CommandPtr介面
_CommandPtr介面返回一個Recordset對象,並且提供了更多的記錄集控制功能,以下代碼示例了使用_CommandPtr介面的方法:

代碼:使用_CommandPtr介面獲取數據

_CommandPtr pCommand;
_RecordsetPtr pRs;
pCommand.CreateInstance(__uuidof(Command));
pCommand->ActiveConnection=pConn;
pCommand->CommandText="select * from student";
pCommand->CommandType=adCmdText;
pCommand->Parameters->Refresh();
pRs=pCommand->Execute(NULL,NULL,adCmdUnknown);
_variant_t varValue = pRs->GetCollect("name");
Cstring strValue=(char*)_bstr_t(varValue);

7、關於數據類型轉換由於COM對象是跨平台的,它使用了一種通用的方法來處理各種類型的數據,因此Cstring 類和COM對象是不兼容的,我們需要一組API來轉換COM對象和C++類型的數據。_vatiant_t和_bstr_t就是這樣兩種對象。它們提供了通用的方法轉換COM對象和C++類型的數據。

詳情請見 http://hi..com/lninglove/blog/item/3f6cec22959e4ca34723e833.html

⑤ 資料庫訪問技術分那些類別啊急求

隨著資料庫產品和技術的發展,資料庫訪問技術也從ODBC、DAO、RDO、OLE DB、ADO 和 RDS發展到今天的ADO.NET。以下內容由城市刀客整理編輯,旨在為你展示資料庫訪問技術的概貌。
<!--[if !supportEmptyParas]-->

ODBC<!--[endif]-->

ODBC 技術為訪問不同的SQL 資料庫提供了一個共同的介面。ODBC 使用 SQL 作為訪問數據的標准。這一介面提供了最大限度的互操作性:一個應用程序可以通過共同的一組代碼訪問不同的 SQL 資料庫管理系統 (DBMS)。開發人員可以添加資料庫驅動程序,將應用程序與用戶所選的 DBMS 聯系起來。驅動程序管理器提供應用程序與資料庫之間的中間鏈接。ODBC 介麵包含一系列功能,由每個 DBMS 的驅動程序實現。當應用程序改變它的 DBMS 時,開發人員只使用新的 DBMS 驅動程序替代舊的驅動程序,並且應用程序可以無需修改代碼照常運行。

<!--[if !supportEmptyParas]-->

標准 ODBC 結構的關系圖如下:

DAO & RDO

DAO 是建立在 Microsoft Jet Microsoft Access 的資料庫引擎基礎之上的。Jet 是第一個連接到 Access 的面向對象的介面。使用 Access 的應用程序可以用 DAO 直接訪問資料庫。由於 DAO 是嚴格按照 Access 建模的,因此,使用 DAO 是連接 Access 資料庫最快速、最有效的方法。DAO 也可以連接到非 Access 資料庫,例如,SQL Server 和 Oracle。DAO 使用 ODBC,但是由於 DAO 是專門設計用來與 Jet 引擎對話的,Jet 將解釋 DAO 和 ODBC 之間的調用。使用除 Access 之外的資料庫時,這種額外的解釋步驟導致較慢的連接速度。如下圖所示:

<!--[if !supportEmptyParas]--> <!--[endif]-->

要克服這樣的限制,Microsoft 創建了 RDO。圖 Application1 顯示了 RDO 如何直接訪問 ODBC API,而無需通過 Jet 引擎。不久之後,Microsoft 推出了 ODBCDirect,它是 DAO 的擴展,在後台使用 RDO。圖 Application2 顯示 ODBCDirect 如何允許現有的 DAO 應用程序訪問資料庫,而沒有 Jet 引擎產生的性能損失。

OLE DB

OLE DB 建立於 ODBC 之上,並將此技術擴展為提供更高級數據訪問介面的組件結構。此結構對企業中及 Internet 上的 SQL、非 SQL 和非結構化數據源提供一致的訪問。(實際上,在訪問基於 SQL 的數據時,OLE DB 仍使用 ODBC,因為對於 SQL 它是最優結構。)

OLE DB 由三個組件構成:數據使用者(例如,一個應用程序);包含並公開數據的數據提供程序以及處理並傳輸數據的服務組件(例如,查詢處理器、游標引擎)。OLE DB 是一個針對 SQL 數據源和非 SQL 數據源(例如,郵件和目錄)進行操作的 API。如下圖所示:

OLE DB 為 C 和 C++ 程序員及使用其他包含 C 樣式函數調用語言的程序員提供綁定。有一些語言(例如 VB 和 VBScript)不提供指針數據類型(地址變數)。因此,這些語言不能使用 C 樣式綁定,而且不能直接調用 OLE DB。<!--[if !supportEmptyParas]--> <!--[endif]-->

在此基礎上,Microsoft 推出了另一個數據訪問對象模型:ADO。ADO 採用基於 DAO 和 RDO 的對象,並提供比 DAO 和 RDO 更簡單的對象模型(盡管會產生一些冗餘的功能,如現在進行一項操作時可以用不止一種方法)。ADO 中的對象層次結構比 DAO 中的更平緩。ADO 包含一些簡化對數據存儲區數據的訪問任務的內置對象。

<!--[if !supportEmptyParas]-->

下圖顯示了應用程序連接到資料庫可採取的許多途徑。例如,VB 程序員可以使用 ADO 將應用程序連接到 OLE DB 提供程序。如果資料庫不支持 OLE DB,應用程序可以通過 ODBC 連接。Visual C++ (VC++) 程序員可以使用 ADO 或直接通過 OLE DB 連接。

讓我們看一個簡單示例,它顯示 ADO 是如何運行的。清單 1 顯示可如何使用典型的記錄集對象--ADO 中的核心對象。記錄集對象表示一系列記錄(很像一個表),並支持游標類型,例如,adOpenForwardOnly、adOpenKeyset、adOpenDynamic 和 adOpenStatic。游標可以在伺服器端(默認情況下),也可在客戶端。<!--[if !supportEmptyParas]--> <!--[endif]-->

清單 1

<!--#include file="adovbs.inc"-->

<%

Dim connStr, rs
connStr = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=pubs;Data Source=localhost"
SET rs= Server.CreateObject("ADODB.Recordset")
<!--[if !supportEmptyParas]-->rs.Open "Authors", connStr, adOpenForwardOnly, adLockOptimistic, adCmdTable
WHILE NOT rs.EOF
response.write rs("au_fname") & "," & rs("au_lname") & "<br>"
rs.moveNext
END
SET rs=nothing
%>

<!--[if !supportEmptyParas]-->

要訪問一條記錄,ADO 需要按順序掃描記錄集。要訪問多個表,需要執行 JOIN 查詢,並將返回的結果作為記錄集。雖然記錄集對象支持斷開的數據訪問,ADO 還是主要為連接的數據訪問而設計。這種連接的訪問模式佔用伺服器端的重要資源。另外,要傳輸記錄集,必須使用 COM 封送處理。COM 封送處理是數據類型轉換過程,這種轉換佔用額外的系統資源。<!--[if !supportEmptyParas]--> <!--[endif]-->

從 ADO 2.1 開始,Microsoft 將 XML 支持添加到 ADO 對象模型,這樣就可將記錄集保存為 XML 文檔。然而,直到 ADO 2.5 出現,ADO 2.1 中 XML 支持的一些限制(例如,分層記錄集對象的保持)才被取消。雖然 ADO 可以將 XML 文檔讀入記錄集,但它只能讀取名為高級數據表圖 (Advanced Data TableGram, ADTG) 的專用架構。<!--[if !supportEmptyParas]--> <!--[endif]-->

Microsoft 希望擁有斷開的數據訪問機制,它擴展了 ADO 並推出遠程數據服務 (RDS)。RDS 是按照 ADO 建模的,無需實時連接就可以使記錄集傳輸到客戶端(例如,Web 瀏覽器)。然而,如同 ADO 一樣,RDS 使用 COM 封送處理將記錄集從伺服器傳輸到客戶端。

ADO.NET

在開始設計 .NET 框架時,Microsoft 就以此為契機重新設計了數據訪問模型。Microsoft 沒有進一步擴展 ADO,而是決定設計一個新的數據訪問框架,但保留了縮寫詞。Microsoft 根據其成功的 ADO 對象模型經驗設計了 ADO.NET。但 ADO.NET 滿足了 ADO 無法滿足的三個重要需求:提供了斷開的數據訪問模型,這對 Web 環境至關重要;提供了與 XML 的緊密集成;還提供了與 .NET 框架的無縫集成(例如,兼容基類庫類型系統)。

下圖顯示了 ADO.NET 的結構。但缺少了能夠在 ADO 中執行諸多功能的記錄集對象。ADO.NET 具有幾個專用對象以執行特定任務,用於代替記錄集對象。表 1 描述了其中的三個專用對象:DataAdapter、DataReader 和 Dataset。

表一:

DataAdapter The DataAdapter object provides a bridge between the database and a DataSet. The key advantage of DataAdapter is that it can work with any data source. The data source might be a database or it might be an XML document.

//DataAdapter提供了一個資料庫與DataSet之間的橋梁。它最大的優點在於能工作於不同的數據源,這些數據源可以是資料庫,也可以是 XML文件。

DataReader The DataReader object provides an efficient way to retrieve records on the server side. DataReader is a connected, read-only, and forward-only data-access mode. This object is useful for Web applications, which use DataReader to display records on Web pages.

//DataReader對象提供了從伺服器端高效獲取數據的途徑,它是在只讀和只進的連接模式下從數據源讀取數據的,這個對象對通過網頁展示數據記錄的Web應用程序開發很有用。

DataSet The DataSet object provides disconnected copies of records from a database. The DataSet object stores records from a table (or multiple tables) in memory without holding a connection to the server. When in memory, DataSet is a binary object. When the DataSet is remoted, transferred, or serialized, it''s represented as a DiffGram—an XML format. Because XML is plaintext, records can be exchanged easily over the Web, bypassing firewall restrictions(限制性). DataSet also contains various objects—such as constraints(壓縮), relationships, and views—that let you manipulate(操作) tables on the client side instead of working through one Recordset in ADO.

//DataSet對象在斷開資料庫連接的情況下提供了一個資料庫內容的拷貝,它把記錄從表中取出,以二進制對象的形式存放在內存中。當Dataset被調用的時候,它表現為DiffGram--一種XML格式。

⑥ C語言連接Access資料庫如何實現標準的c語言

1、C/C++與資料庫交互,像 mssql/ mysql / oracle 等,一般都有成熟的第三方庫,這些庫裡面無非就是封裝了與資料庫通訊的方式和通訊協議搜一下要用的資料庫相關的 API 文檔,會說得很清楚任何文件都是二進制數據,關鍵是數據存儲的組織方式通用擴展名的文件,像gif/doc/jpg/wav,格式都是固定的。

2、舉個例子,連接SQL:

//打開資料庫
strDBClass.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=%s;JetOLEDB:DatabasePassword=%s"),m_strUnEntryptMdbFilePath,m_strMDBPassword);
//創建連接
HRESULThr=m_pConnection.CreateInstance(_uuidof(Connection));
_ConnectionPtrm_pConnection->Open(m_strDBClass,_T(""),_T(""),adConnectUnspecified);
//聲明表單指針
_RecordsetPtrpBandRecordset;
pBandRecordset.CreateInstance(__uuidof(Recordset));
//執行語句
CStringstrSQL(L"SELECT*FROM[Band]");
m_pConnection->Execute((LPCTSTR)strSQL,NULL,0);
//提取某一項例如BandInfo
intiBandInfo=wcscmp(colum,L"BandInfo");
while(!recordsetPtr->adoEOF)
{
var=recordsetPtr->GetCollect(colum);
if(var.vt!=VT_NULL)
strName=(LPCSTR)_bstr_t(var);
recordsetPtr->MoveNext();
}

⑦ 運用設計模式構建通用資料庫訪問類

這就需要我們在實際開發過程中將這些資料庫訪問類再作一次封裝 經過這樣的封裝 不僅可以達到上述的目標 還可以減少操作資料庫的步驟 減少代碼編寫量 在這個方面 微軟為我們提供了Application Block 但是 可惜的是目前只支持Sql Server 這里 介紹一種在實際應用中得到了非常好的效果的實作策略——筆者編寫的Websharp框架中的數據訪問結構 Factory設計模式是使用的主要方法 我們先來看看Factory的含義 定義一個用於創建對象的介面 讓子類決定實例化哪一個類 Factory Method使一個類的實例化延遲到其子類 我們這里可能會處理對多種資料庫的操作 因此 需要首先定義一個操縱資料庫的介面 然後 根據資料庫的不同 由類工廠決定實例化哪個類 下面 我們首先來定義這個訪問介面 為了方便說明問題 我們在這里只列出了比較少的方法 其他的方法是很容易參照添加的 public interface DataAccess{DatabaseType DatabaseType{get;} //資料庫類型IDbConnection DbConnection{get;} //得到資料庫連接void Open(); //打開資料庫連接void Close(); //關閉資料庫連接IDbTransaction BeginTransaction(); //開始一個事務int ExecuteNonQuery(string mandText); //執行Sql語句DataSet ExecuteDataset(string mandText);//執行Sql 返回DataSet} 因為 DataAccess的具體實現類有一些共同的方法 所以 先從DataAccess實現一個抽象的AbstractDataAccess類 包含一些公用方法 然後 我們分別為Sql Server Oracle和OleDb資料庫編寫三個數據訪問的具體實現類 public sealed class MSSqlDataAccess : AbstractDataAccess{……//具體實現代碼 }public class OleDbDataAccess : AbstractDataAccess{……//具體實現代碼 }public class OracleDataAccess : AbstractDataAccess{……//具體實現代碼 } 現在我們已經完成了所要的功能 下面 我們需要創建一個Factory類 來實現自動資料庫切換的管理 這個類很簡單 主要的功能就是根據資料庫類型 返回適當的資料庫操縱類 public sealed class DataAccessFactory{private DataAccessFactory(){}private static PersistenceProperty defaultPersistenceProperty;public static PersistenceProperty DefaultPersistenceProperty{get{return defaultPersistenceProperty;}set{defaultPersistenceProperty=value;}}public static DataAccess CreateDataAccess(PersistenceProperty pp){DataAccess dataAccess;switch(pp DatabaseType){case(DatabaseType MSSQLServer):dataAccess = new MSSqlDataAccess(pp ConnectionString);break;case(DatabaseType Oracle):dataAccess = new OracleDataAccess(pp ConnectionString);break;case(DatabaseType OleDBSupported):dataAccess = new OleDbDataAccess(pp ConnectionString);break;default:dataAccess=new MSSqlDataAccess(pp ConnectionString);break;}return dataAccess;}public static DataAccess CreateDataAccess(){return CreateDataAccess(defaultPersistenceProperty);}}好了 現在 一切都完成了 客戶端在代碼調用的時候 可能就是採用如下形式 PersistenceProperty pp = new PersistenceProperty();pp ConnectionString = server= ;uid=sa;pwd=;database=Northwind; ;pp DatabaseType = DatabaseType MSSQLServer;pp UserID = sa ;pp Password = ;DataAccess db= DataAccessFactory CreateDataAccess(pp)db Open();……//db 需要的操作db Close();或者 如果事先設定了DataAccessFactory的DefaultPersistenceProperty屬性 可以直接使用DataAccess db= DataAccessFactory CreateDataAccess()方法創建DataAccess實例 當資料庫發生變化的時候 只需要修改PersistenceProperty的值 客戶端不會感覺到變化 也不用去關心 這樣 實現了良好的封裝性 當然 前提是 你在編寫程序的時候 沒有用到特定資料庫的特性 例如 Sql Server的專用函數 lishixin/Article/program/ASP/201311/21865

⑧ 關於C語言調用OCI訪問資料庫

不要使得存儲過程,換成視圖,可以 ,,,,,,
~~~~~~~~~~~~~~~~~~~~~~~~~~

⑨ 怎樣用vc++ 6.0訪問SQL Server資料庫

從功能簡單的資料庫(如Jet Engine)到復雜的大型資料庫系統(如oracle),VC++6.0都提供了一些編程介面。本文主要介紹以下五種: 1.ODBC API;2.MFC ODBC類;3.MFC DAO類;(數據訪問對象)4.MFC的OLE/DB;5.ActiveX數據對象(ADO)。6.RDO遠程數據訪問
1.開放資料庫連接(ODBC API):提供了一個通用的編程介面,允許程序與多種不同的資料庫連接。它為Oracle,SQL Server,MS Excel等都提供了驅動程序,使得用戶可以使用SQL語句對資料庫進行直接的底層功能操作。在使用ODBC API時,用戶須引入的頭文件為 "sql.h ", "sqlext.h ", "sqltypes.h "。用ODBC API創建資料庫應用程序遵循一定的基本步驟:
第一步是分配ODBC環境,使一些內部結構初始化。完成這一步,須分配一個SQLHENV類型的變數在ODBC環境中做句柄使用。
第二步是為將要使用的每一個數據源分配一個連接句柄,由函數SQLALLocHandle()完成。
第三步是使用SQLConnect()把連接句柄與資料庫連接,可以先通過SQLSetConnectAttr()設置連接屬性。
然後就可以進行SQL語句的操作,限於篇幅,相關的函數就不具體介紹了,讀者可以參考相關書籍。
操作完成後,用戶取回相應的結果,就可以取消與資料庫的連接。
最後需要釋放ODBC環境。
ODBC API的特點是功能強大豐富,提供了非同步操作,事務處理等高級功能,但相應的編程復雜,工作量大。
2.MFC ODBC類:MFC1.5後的版本里引入封裝了ODBC功能的類。通過這些類提供與ODBC的介面,使得用戶可以不須處理ODBC API中的繁雜處理就可以進行資料庫操作。主要的MFC ODBC類如下。
CDatabase類:一個CDatabase對象表示一個到數據源的連接,通過它可以操作數據源。應用程序可使用多個CDatabase對象:構造一個對象並調用OpenEx()成員函數打開一個連接。接著構造CRecordSet對象以操作連接的數據源,並向CDatabase對象傳遞記錄集構造程序指針。完成使用後用Close()成員函數銷毀CDatabase對象。一般情況下並不需要直接使用CDatabase對象,因為CRecordSet對象可以實現大多數的功能。但是在進行事務處理時,CDatabase就起到關鍵作用。事務(Transaction)指的是將一系列對數據源的更新放在一起,同時提交或一個也不提交,為的是確保多用戶對數據源同時操作時的數據正確性。
CRecordSet類:一個CRecordSet對象代表一個從數據源選擇的一組記錄的集合-記錄集。記錄集有兩種形式:snapshot和dynaset。前者表示數據的靜態視圖,後者表示記錄集與其他用戶對資料庫的更新保持同步。通過CRecordSet對象,用戶可以對資料庫中的記錄進行各種操作。
CRecordView類:CRecordView對象是在空間中顯示資料庫記錄的視圖。這種視圖是一種直接連到一個CRecordSet對象的格式視圖,它從一個對話框模板資源創建,並將CRecordSet對象的欄位顯示在對話框模板的控制項里。對象利用DDX和RFX機制,使格式上的控制項和記錄集的欄位之間數據移動自動化,也就是說,用戶甚至不要編寫一行代碼就可以實現簡單的資料庫記錄查看程序。
CDBException類:由Cexception類派生,以三個繼承的成員變數反映對資料庫操作時的異常:
m_nRetCode:以ODBC返回代碼(SQL_RETURN)的形式表明造成異常的原因。
m_strError:字元串,描述造成拋出異常的錯誤原因。
m_strStateNativeOrigin:字元串,用以描述以ODBC錯誤代碼表示的異常錯誤。
MFC資料庫類成員函數都能拋出CDBException類型的異常,所以在代碼對資料庫進行操作後監測異常是正確做法。
MFC ODBC類在實際開發中應用最廣,因為它功能豐富,操作相對簡便。
3.MFC DAO(數據訪問對象)編程:DAO用於和微軟的Access資料庫介面。在資料庫應用程序如果只需與Access資料庫介面時,使用DAO編程較方便。其主要類如下。
CDaoWorkspace:CDaoWorkspace對象可以讓一個用戶管理從登陸到離開期間,指定的密碼保護的資料庫會話全過程。大多數情況下不要多個工作區也不要創建明確的工作區對象。因為在打開資料庫和記錄集對象時,它們可以使用DAO預設工作區。
CDaoDatabase:代表一個連接,類似上述CDatabase類。
CDaoRecordSet:用來選擇記錄集並操作,類似上述CRecordSet類。
CDaoRecordView:類似上述CRecordView類。
CDaoException:類似上述CDBException類。
CDaoTableDef:表示基本表或附加表的定義。每個DAO資料庫對象包括一個稱為TableDef的收集,包含所有存儲的DAO表定義對象。CDaoTableDef對象可以用來控製表定義。
CDaoQueryDef:CDaoQueryDef對象表示了一個查詢定義(querydef)。
CDaoFieldExchange:支持資料庫類使用的DAO欄位交換(DFX)常式。也可處理事務,類似MFC ODBC類。
MFC DAO僅用來支持Access資料庫,應用范圍相對固定。
4.OLE DB:OLE DB在數據提供程序和用戶之間提供了靈活的組件對象模型(COM)介面,這種靈活性有時會使得操作復雜化。OLE DB框架定義了應用的三個基本類。
數據提供程序Data Provider:擁有自己的數據並以表格形式顯示數據的應用程序。提供OLE DB的行集COM介面,期顯示範圍可以從單一數據表格的簡單提供者知道更復雜的分布式資料庫系統。
使用者Consumers:使用OLE DB介面對存儲在數據提供程序中的數據進行控制的應用程序。用戶應用程序歸為使用類。
服務提供程序Service Provider:是數據提供程序和使用者的組合。服務提供程序沒有自己的數據,但使用
OLE DB使用者介面來訪問存儲在數據提供程序中的數據。然後,服務提供程序通過打開數據提供程序介面使得數據對使用者有效。服務提供程序常用於向應用程序提供高層次服務,比如高級分布式查詢。
OLE DB編程時,用戶使用組件對象開發應用程序。這些組件有:
枚舉器:用於列出可用的數據源;
數據源:代表單獨的數據和服務提供程序,用於創建對話;
對話:用於創建事務和命令;
事務:用於將多個操作歸並為單一事務處理;
命令:用於向數據源發送文本命令(SQL),返回行集;
錯誤:用於獲得錯誤信息。
5.ActiveX數據對象(ADO):是微軟提供的面向對象的介面,與OLE DB類似,但介面更簡單,具有更廣泛的特徵數組和更高程度的靈活性。ADO基於COM,提供編程語言可利用的對象,除了面向VC++,還提供面向其他各種開發工具的應用,如VB,VJ等。ADO在伺服器應用方面非常有用,特別是對於動態伺服器頁面ASP(Active Server Page)。
ADO對象結構類似於OLE DB,但並不依靠對象層次。大多數情況下,用戶只需要創建並只使用需要處理的對象。下面的對象類組成了ADO介面。
Connection:用於表示與資料庫的連接,以及處理一些命令和事務。
Command:用於處理傳送給數據源的命令。
Recordset:用於處理數據的表格集,包括獲取和修改數據。
Field:用於表示記錄集中的列信息,包括列值和其他信息。
Parameter:用於對傳送給數據源的命令之間來回傳送數據。
Property:用與操作在ADO中使用的其他對象的詳細屬性。
Error:用於獲得可能發生的錯誤的詳細信息。
在VC++使用ADO需要進行COM操作,詳細方法在此就不贅述了。
在當今流行的分布式開發環境下,VC++6.0在資料庫開發方面有較強的優勢,學會
在不同的場合選用不同的技術,對開發人員來說是必要的技術。

⑩ C#連接mysql資料庫如何實現多條件查詢

給你一個稍微復雜一點的查詢,我設計的