C语言中数据库参数传递方法简介 (c 数据库参数传递)

在C语言中,数据库参数传递是一项非常重要的技术,因为它在大多数程序中都被广泛应用。它允许您以一种有效的方式读取和写入数据库中的数据,并且管理数据库的连接和事务。在本文中,我们将介绍一些C语言中的数据库参数传递方法,以帮助您增强对数据库的访问和管理。

一. 使用结构体

结构体是一种C语言中常用的数据结构,用于存储不同数据类型的值。当在C语言中处理数据库时,您可以使用结构体来存储和快速访问连接和查询字符串. 下面是使用一个结构体来管理数据库参数的示例:

“`

struct DatabaseParams {

char *host;

char *user;

char *password;

char *database;

};

“`

在上面的代码中,我们定义了一个名为DatabaseParams的结构体,该结构体包含四个字符型的指针类型的成员变量。host表示数据库所在的主机名,user表示数据库登录用户名,password表示数据库登录密码,database表示要连接的数据库名称。通过这种方式,我们可以在程序处理数据库时轻松访问这些参数。

二. 将参数作为函数参数传递

将数据库参数作为函数的参数传递是一种通用的方法,经常在C语言中使用。这种方法可以用来打开数据库连接,执行查询操作,关闭数据库连接等。通过在函数调用时传递参数,函数可以访问所需的数据并执行必要的操作。下面是一个使用此方法的示例:

“`

void open_database(char *host, char *user, char *password, char *database) {

// Open database connection

}

void close_database() {

// Close database connection

}

int execute_query(char *query) {

// Execute query and return result

}

“`

在上面的示例中,我们使用三个不同的函数来分别打开和关闭数据库并执行查询操作。在打开数据库函数open_database中,我们接受四个不同的参数:主机名,登录用户名,密码和数据库名称。这些参数在打开数据库连接时被使用,并由该函数告知成功或失败反馈。您可以使用类似的方法来为其他操作设计更多的函数,例如执行SQL命令。

三. 使用动态链接库(DLL)

使用动态链接库是一种提供多种数据库连接和查询功能的强大方法。动态链接库可以让您使用其他人编写的库并从您的程序中调用函数。您可以调用连接和查询函数以访问一个特定的数据库和数据。这种方法可以在不同的平台和编译器上使用,并被广泛应用于许多开源数据库连接库,例如ODBC(开放式数据库连接)和JDBC(Java数据库连接)。下面是一个使用ODBC的示例:

“`

#include

#include

#include

#include

int mn() {

SQL_HANDLE_ENV env_handle;

SQL_HANDLE_DBC dbc_handle;

SQLRETURN retcode;

char *dsn = “DSN=mydatabase”;

/* Allocate an environment handle */

retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env_handle);

if (!SQL_SUCCEEDED(retcode)) {

return 1;

}

/* Set the version number for the environment handle */

retcode = SQLSetEnvAttr(env_handle, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);

if (!SQL_SUCCEEDED(retcode)) {

SQLFreeHandle(SQL_HANDLE_ENV, env_handle);

return 1;

}

/* Allocate a connection handle */

retcode = SQLAllocHandle(SQL_HANDLE_DBC, env_handle, &dbc_handle);

if (!SQL_SUCCEEDED(retcode)) {

SQLFreeHandle(SQL_HANDLE_ENV, env_handle);

return 1;

}

/* Connect to the database */

retcode = SQLConnect(dbc_handle, (SQLCHAR *)dsn, SQL_NTS, NULL, 0, NULL, 0);

if (!SQL_SUCCEEDED(retcode)) {

SQLFreeHandle(SQL_HANDLE_DBC, dbc_handle);

SQLFreeHandle(SQL_HANDLE_ENV, env_handle);

return 1;

}

/* Clean up the handles */

SQLDisconnect(dbc_handle);

SQLFreeHandle(SQL_HANDLE_DBC, dbc_handle);

SQLFreeHandle(SQL_HANDLE_ENV, env_handle);

return 0;

}

“`

在上面的示例中,我们使用ODBC来连接一个数据库。我们使用SQLAllocHandle()函数来分配SQL_HANDLE_ENV和SQL_HANDLE_DBC句柄,以控制环境和数据库连接。然后,我们使用SQLConnect()函数来打开连接,如果未连接,则返回1。我们使用SQLDisconnect()函数来关闭连接并释放句柄。

相关问题拓展阅读:

c语言怎么把链表数据写进mysql

方法如下:

1.头文件:

#include

#include

#include//这个是必需要包含的,下面对mysql的所有操作函数,都出自这里

2.定义一个MYSQL变量:

MYSQLmysql;

这里MYSQL是一个用于连接MySql数据库的变量。

在后面对mysql数据库的操作中,我们就用这个MYSQL变量作为句柄的。

3.定义数据库参数:

charhost=”localhost”;

charuser=”username”;

charpasswd=”pwd”;

chardbname=”testdb”;

4.数据库操作

1).初始化数据库:

mysql_init(&mysql);

2).连接数据库:

mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0);

我们在操作时,可以对以上的函数进行if测试,如果初始化或者连接出错,作出相应提示,以便调试。

5.对数据库的操作:

Mysql_query(&mysql,“select*fromtestdbwherecondition”);

我们在实际操作中,为了更方便的使用程序中的某些变量,我们将会用到一个函数:

intsprintf(char*str,constchar*format,?);

这个函数用来格式化我们的字符串,然后将变量按照给你的格式,赋给之一个参数。

我们使用这个方法方法可以很方便的使用我们的变量来对数据库进行操作。例如我们将要进行数据库的查询操作,我们就可以这样使用:

sprintf(sql,”select*fromtestdbwhereusername=‘%s’”,u_name);

然后使用mysql_query(&mysql,sql)进行查询。

MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL是更流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是更好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。

用C编写数据库怎么写

一个万能的DBHelper就可以解决都事情,直接对数据库中的存储过程进行调用,只需要传入参数就可以和你调用的存储过程就可以。有关万能DBHelper的参考代码如下:using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Data;

using System.Data.SqlClient;

namespace Clock

{

public static class DBHelper

{

private static SqlConnection connection;//这里的SqlConnection 自己写//对数据进行查询时候调用的

public static SqlConnection Connection

{

get

{

string connectionString = “Data Source=PC-Ahsun;Initial Catalog=Clock; uid=sa;pwd=striveahsun”;

if (connection == null)

{

connection = new SqlConnection(connectionString);

connection.Open();

}

else if (connection.State == System.Data.ConnectionState.Closed)

{

connection.Open();

}

else if (connection.State == System.Data.ConnectionState.Broken)

{

connection.Close();

connection.Open();

}

return connection;

}

}//对数据进行增删改时候调用的

public static int ExecuteCommand(string sql)

{

SqlCommand cmd = new SqlCommand(sql,connection);

int resualt = cmd.ExecuteNonQuery();

return resualt;

}

}

}

用Visual C++开发数据库应用程序()

3、 使用MFC访问ODBC数据源

3.1 概述

VisualC++的MFC类库定义了几个数据库类。在利用ODBC编程时,经常要使用到CDatabase(数据库类),CRecordSet(记录集类)和CRecordView(可视记录集类)。 其中:

CDatabase类对象提供了对数据源的连接,通过它你可以对数据源进行操作。

CRecordView类对象能以控制的形式 显示数据库记录。这个视图是直接连到一个CRecordSet对象的表视图。

CRecordSet类对象提供了从数据源 中提取出的记录集。CRecordSet对象通常用于两种形式: 动态行集(dynasets)和快照集(snapshots)。动态行集能保 持与其他用户所做的更改保持同步。快照集则是数据的一个静态视图。每一种形式在记录集被打开时都提供一组记录,所不同的是,当你在一个动态行集里滚 动到一条记录时,由其他用户或是你应用程序中的其他记录集对该记录所做的更改会相应地显示出来。腔吵

Visual C++提供了几种记录集,可以用来定制应用程序的工作方式。查看这些不同选项的最快方式要兼顾速度和特征。你会发现,在很多情况下,如果想添加特征,就必须付出程序执行速度降低的代价。下面告诉你一些可以自由支配的记录集选项。更重要的是,要告诉你从这个选项可以获得更快的速度还是更多的特征。

1、Snapshot(快照) 这个选项要Visual C++在一次快照中下载整个查询。换言之,及时快速地给数据库内容拍照,并把它作为未来工作的基础。这种方法有三个缺点。之一,你看不到别人在网络上做的更新,这可能意味着你的决定是建立在老信息的基础上。第二,一次就下载所有这些记录,这意味着在下载期间给网络增加了沉重的负担。第三,记录下载时用户会结束等待,这意味着网络的呼叫性能变得更低。然而这种方法也有两个优点。之一,记录一旦被下载,该工作站所需的网络活动几乎就没有了枣这为其它请求释放了带宽。总之,你会看到网络的吞吐量增大了。第二,因为所有被申请的记录都在用户的机器上,所以用户实际上会得到应用程序更佳的总体性能。你可能想把快照的方法限制在较小的数据库上使用,原因在于快照适用于用户请求信息而不适用于数据编辑会话。

2、Dynaset(动态集) 使用这个选项时,Visual C++创建指向所请求的每个记录的实际指针。另外,只有填充屏幕时实际需要的记录是从服务器上下载来的。这种方法的好处很明显。几乎马上就能在屏幕上看到记录。而且还会看到其它用户对数据库所做的更改。最后,其它用户也会看到你做的更改,因为动态集在你更改记录时被上载到服务器上。很明显,这种方法要求对服务器的实时访问,它槐脊减小了网络总吞吐量并降低了应用程序的性能。这个选项适合于创建用户要花费很多时间来编辑数据的应用程序。同时,它也是大型数据库的更佳选择,原因在于只需下载用户实际需要的信息。

3.2 应用ODBC编程

可以应用AppWizard来建立一个ODBC的应用程序框架,也可以直接使用ODBC来进行数据库编程,这时,应包括头文铅圆渗件afxdb.h。

应用ODBC编程两个最重要的类是CDatabase和CRecordSet,但在应用程序中,不应直接使用CRecordSet类,而必须从CRecordSet类产生一个导出类,并添加相应于数据库表中字段的成员变量。随后,重载CRecordset类的成员函数DoFieldExchange,该函数通过使用RFX函数完成数据库字段与记录集域数据成员变量的数据交换,RFX函数同对话框数据交换(DDX)机制相类似,负责完成数据库与成员变量间的数据交换。

下面举例说明在VisualC++环境中ODBC 的编程技巧:

3.21 数据库连接

在CRecordSet类中定义了一个成员变 量m_pDatabase:

CDatabase *m_pDatabase;

它是指向对象数据库类的指针。如果在CRecordSet类对象调用Open()函数之前,将一个已经打开的CDatabase类对象指针传给m_pDatabase,就能共享相同 的CDatabase类对象。如:

CDatabase m_db;

CRecordSet m_set1,m_set2;

m_db.Open(_T(“Super_ES”)); // 建 立ODBC 连 接

m_set1.m_pDatabase=m_db; //m_set1 复 用m_db 对 象

m_set2.m_pDatabse=m_db; // m_set2 复 用m_db 对 象

或如下:

Cdatabase db;

db.Open(“Database”); //建立ODBC连接

CrecordSet m_set(db); //构造记录集对象,使数据库指向db

3.22 查询记录

查询记录使用CRecordSet::Open()和 CRecordSet::Requery()成员函数。在使用CRecordSet类对象之前,必须使用 CRecordSet::Open()函数来获得有效的记录集。一旦已经使用过CRecordSet::Open() 函数,再次查询时就可以应用CRecordSet::Requery()函数。在调 用CRecordSet::Open()函数时,如果已经将一个已经打开的CDatabase 对象指针传给CRecordSet类对象的m_pDatabase成员变量,则使 用该数据库对象建立ODBC连接;否则如果m_pDatabase为空指 针,就新建一个CDatabase类对象并使其与缺省的数据源 相连,然后进行CRecordSet类对象的初始化。缺省数据源 由GetDefaultConnect()函数获得。你也可以提供你所需要的SQL 语句,并以它来调用CRecordSet::Open()函数,例如:

m_Set.Open(AFX_DATABASE_USE_DEFAULT,strSQL);

如果没有指定参数,程序则使 用缺省的SQL语句,即对在GetDefaultSQL()函数中指定的SQL语 句进行操作:

CString CTestRecordSet::GetDefaultSQL()

{return _T(“,”);}

对于GetDefaultSQL()函数返回的表名, 对应的缺省操作是SELECT语句,即:

SELECT * FROM BasicData,MainSize

查询过程中也可以利用CRecordSet的 成员变量m_strFilter和m_strSort来执行条件查询和结果排序。m_strFilter 为过滤字符串,存放着SQL语句中WHERE后的条件串;m_strSort 为排序字符串,存放着SQL语句中ORDERBY后的字符串。 如:

m_Set.m_strFilter=”TYPE=’电动机'”;

m_Set.m_strSort=”VOLTAGE”;

m_Set.Requery();

对应的SQL语句为:

SELECT * FROM BasicData,MainSize

WHERE TYPE=’电动机’

ORDER BY VOLTAGE

除了直接赋值给m_strFilter以外,还 可以使用参数化。利用参数化可以更直观,更方便地 完成条件查询任务。使用参数化的步骤如下:

(1).声明参变量:

Cstring p1;

Float p2;

(2).在构造函数中初始化参变量

p1=_T(“”);

p2=0.0f;

m_nParams=2;

(3).将参变量与对应列绑定

pFX-SetFieldType(CFieldExchange::param)

RFX_Text(pFX,_T(“P1”),p1);

RFX_Single(pFX,_T(“P2”),p2);

完成以上步骤之后就可以利用参变量进行条件查询了:

m_pSet-m_strFilter=”TYPE=?ANDVOLTAGE=?”;

m_pSet-p1=”电动机”;

m_pSet-p2=60.0;

m_pSet-Requery();

参变量的值按绑定的顺序替换 查询字串中的“?”适配符。

如果查询的结果是多条记录的 话,可以用CRecordSet类的函数Move(),MoveNext(),MovePrev(),MoveFirst() 和MoveLast()来移动光标。

3.23 增加记录

增加记录使用AddNew()函数,要求数据库必须是以允许增加的方式打开:

m_pSet-AddNew(); //在表的末尾增加新记录

m_pSet-SetFieldNull((m_pSet-m_type),FALSE);

m_pSet-m_type=”电动机”;

… //输入新的字段值

m_pSet- Update(); //将新记录存入数据库

m_pSet-Requery(); //重建记录集

3.24 删除记录

直接使用Delete()函数,并且在调用Delete() 函数之后不需调用Update()函数:

m_pSet-Delete();

if(!m_pSet-IsEOF())

m_pSet-MoveNext();

else

m_pSet-MoveLast();

3.25 修改记录

修改记录使用Edit()函数:

m_pSet-Edit(); //修改当前记录

m_pSet-m_type=”发电机”; //修改当前记录字段值

m_pSet-Update(); //将修改结果存入数据库

m_pSet-Requery();

3.26 统计记录

统计记录用来统计记录集的总数。可以先声明一个CRecordset对象m_pSet。再绑定一个变量m_lCount,用来统计记录总数。执行如下语句:

m_pSet-Open(“Select Count(*) from 表名 where 限定条件”);

RecordCount=m_pSet-m_lCount;

m_pSet-Close();

RecordCount即为要统计的记录数。

或如下:

CRecordset m_Set(db); //db 为CDatabase对象

CString strValue;

m_Set.Open(Select count(*) from 表名 where 限定条件”);

m_pSet.GetFieldValue((int)0,strValue);

long count=atol(strValue);

m_set.Close();

count为记录总数。

3.27 执行SQL语句

虽然通过CRecordSet类,我们可以完成 大多数的查询操作,而且在CRecordSet::Open()函数中也可以 提供SQL语句,但是有的时候我们还想进行一些其他操 作,例如建立新表,删除表,建立新的字段等等,这 时就需要使用到CDatabase类的直接执行SQL语句的机制。通 过调用CDatabase::ExecuteSQL()函数来完成SQL语句的直接执行:

如下代码所示

BOOL CDB::ExecuteSQLAndReportFailure(const CString strSQL)

{

TRY

{

m_pdb-ExecuteSQL(strSQL); //直接执行SQL语句

}

CATCH (CDBException,e)

{

CString strMsg;

strMsg.LoadString(IDS_EXECUTE_SQL_FAILED);

strMsg+=strSQL;

return FALSE;

}

END_CATCH

return TRUE;

}

应当指出的是,由于不同DBMS提 供的数据操作语句不尽相同,直接执行SQL语句可能会破坏软件的DBMS无关性,因此在应用中应当慎用此类操作。

3.28 注意

从CRecordSet导出的类中如果包含DataTime类型的数据,在VC中是用CTime类型来替代的,这时,构造函数没有赋于缺省值。这时,我们应当手工赋值。如下所示:

CTime m_time;

m_time=NULL;#p#副标题#e#

3.3 总结

VisualC++中的ODBC类库可以帮助程序员完成绝大多数的数据库操作。利用ODBC技术使得程序员从具体的DBMS中解脱出来,从而极大的减少了软件开发的工作量,缩短开发周期,提高了效率和软件的可靠性。

4、使用DAO

4.1 概述

Visual C++提供了对DAO的封装,MFC DAO类封装了DAO(数据库访问对象)的大部分功能,从面Visual C++程序就可以使用Visual C++提供的MFC DAO类方便的访问Microsoft Jet 数据库,编制简洁、有Visaul C++特色的数据库应用程序。

数据库访问对象(DAO)提供了一种通过程序代码创建和操纵数据库的机制。多个DAO对象构成一个体系结构,在这个结构里,各个DAO对象协同工作。DAO支持以下四个数据库选项:

打开访问数据库(MDB文件)——MDB文件是一个自包含的数据库,它包括查询定义、安全信息、索引、关系,当然还有实际的数据表。用户只须指定MDB文件的路径名。

直接打开ODBC数据源——这里有一个很重要的限制。不能找开以Jet引擎作为驱动程序的ODBC数据源;只可以使用具有自己的ODBC驱动程序DLL的数据源。

用Jet引擎找开ISAM型(索引顺序访问方法)数据源(包括dBase,FoxPro,Paradox,Btrieve,Excel或文本文件)——即使已经设置了ODBC数据源,要用Jet引擎来访问这些文件类型中的一种,也必须以ISAM型数据源的方式来找开文件,而不是以ODBC数据源的方式。

给ACCESS数据库附加外部表——这实际上是用DAO访问ODBC数据源的首选方法。首先使用ACCESS把ODBC表添加到一个MDB文件上,然后依照之一选项中介绍的方法用DAO找开这个MDB文件就可以了。用户也可以用ACCESS把IA文件附加到一个MDB文件上。

4.2 应用DAO编程

4.21 打开数据库

CDaoWorkspace对象代表一个DAO Workspace对象,在MFC DAO体系结构中处于更高处,定义了一个用户的同数据库的会话,并包含打开的数据库,负责完成数据库的事务处理。我们可以使用隐含的workspace对象。

CDaoDatabase对象代表了一个到数据库的连接,在MFC中,是通过CDaoDatabase封装的。

在构造CDaoDatabase对象时,有如下两种方法:

创建一个CDaoDatabase对象,并向其传递一个指向一个已经找开的CdaoWorkspace对象的指针。

创建一个CDaoDatabase对象,而不明确地指定使用的workspace,此时,MFC将创建一个新的临时的CDaoWorkspace对象。

如下代码所示:

CDaoDatabase db;

db.Open(“test.mdb”,FALSE,FALSE,_T(“”);

其中参数一包括要打开的文件的全路径名。

4.22 查询记录

一个DAO recordset对象,代表一个数据记录的,该是一个库表或者是一个查询的运行结果中的全部记录。CDaoRecorset对象有三种类型:表、动态集、快照。

通常情况下,我们在应用程序中可以使用CDaoRecordset的导出类,这一般是通过ClassWizard或AppWizard来生成的。但我们也可以直接使用CDaoRecordset类生成的对象。此时,我们可以动态地绑定recordset对象的数据成员。

如下代码所示:

COleVariant var;

long id;

CString str;

CDaoRecordset m_Set(db);

m_Set.Open(“查询的SQL语句”);

while(!m_Set.IsEOF())

{

/*

处理

m_Set.GetFieldValue(“ID”,var);

id=V_I4(var);

m_Set.GetFieldValue(“Name”,var);

str=var.pbVal;

*/

m_Set.MoveNext();

}

m_Set.Close();

4.23 添加记录

添加记录用AddNew函数,此时用SetFieldValue来进行赋值。

如下代码所示:

m_pDaoRecordset-AddNew ();

sprintf(strValue,”%s”,m_UserName );

m_pDaoRecordset-SetFieldValue (“UserName”,strValue);

sprintf(strValue,”%d”,m_PointId );

m_pDaoRecordset-SetFieldValue (“PointId”,strValue);

dataSrc.SetDateTime (m_UpdateTime .GetYear ),m_UpdateTime .GetMonth ),m_UpdateTime .GetDay (),

m_UpdateTime .GetHour (),m_UpdateTime .GetMinute (),m_UpdateTime .GetSecond ());

valValue=dataSrc;

m_pDaoRecordset-SetFieldValue (“UpdateTime”,valValue);

sprintf(strValue,”%f”,m_pRecordset-m_OldValue );

m_pDaoRecordset-SetFieldValue (“OldValue”,strValue);

sprintf(strValue,”%f”,m_pRecordset-m_NewValue );

m_pDaoRecordset-SetFieldValue (“NewValue”,strValue);

m_pDaoRecordset-Update ();

此时,要注意,日期时间型数据要用SetDataTime函数来赋值,这里面要用到COleVariant类型数据,具体用法可以参考有关帮助。

4.24 修改记录

修改记录用Edit()函数,把记录定位到要修改的位置,调用Edit函数,修改完成后,调用Update函数。

如下代码所示:

m_Set.Edit();

m_Set.SetFieldValue(“列名”,”字符串”);

m_Set.Update();

4.25 删除记录

删除记录用Delete()函数,使用后不需调用Update()函数。

4.26 统计记录

可以使用如下代码来统计记录数:

COleVariant varValue;

CDaoRecordset m_Set(db);

m_Set.Open(dbOpenDynaset,”SQL语句”);

varValue=m_Set.GetFieldValue(0);

m_lMaxCount=V_I4(varValue);

m_Set.Close();

如果是统计一张表中总记录,可以使用CDaoTableDef对象,如下代码所示:

CDaoTableDef m_Set(gUseDB);

Count=m_Set.GetRecordCount();

m_Set.Close();

不能用CDaoRecordset对象的GetRecordCount()来取得记录数。

4.3 总结

使用DAO技术可以便我们方便的访问Microsoft Jet引擎数据库,由于Microsoft Jet不支持多线程,因此,必须限制调用到应用程序主线程的所有DAO。

5 使用OLE DB

5.1 概述

OLE DB的存在为用户提供了一种统一的方法来访问所有不同种类的数据源。OLE DB可以在不同的数据源中进行转换。利用OLE DB,客户端的开发人员在进行数据访问时只需把精力集中在很少的一些细节上,而不必弄懂大量不同数据库的访问协议。

OLE DB是一套通过COM接口访问数据的ActiveX接口。这个OLE DB接口相当通用,足以提供一种访问数据的统一手段,而不管存储数据所使用的方法如何。同时,OLE DB还允许开发人员继续利用基础数据库技术的优点,而不必为了利用这些优点而把数据移出来。

5.2 使用ATL使用OLE DB数据使用程序

由于直接使用OLE DB的对象和接口设计数据库应用程序需要书写大量的代码。为了简化程序设计,Visual C++提供了ATL模板用于设计OLE DB数据应用程序和数据提供程序。

利用ATL模板可以很容易地将OLE DB与MFC结合起来,使数据库的参数查询等复杂的编程得到简化。MFC提供的数据库类使OLE DB的编程更具有面向对象的特性。Viual C++所提供用于OLE DB的ATL模板可分为数据提供程序的模板和数据使用程序的模板。

使用ATL模板创建数据应用程序一般有以下几步骤:

创建应用框架

加入ATL产生的模板类

在应用中使用产生的数据访问对象

不用ATL使用OLE DB数据使用程序

利用ATL模板产生数据使用程序较为简单,但适用性不广,不能动态适应数据库的变化。下面我们介绍直接使用MFC OLE DB类来生成数据使用程序。

模板的使用

OLE DB数据使用者模板是由一些模板组成的,包括如下一些模板,下面对一些常用类作一些介绍。

会话类

CDataSource类

CDataSource类与OLE DB的数据源对象相对应。这个类代表了OLE DB数据提供程序和数据源之间的连接。只有当数据源的连接被建立之后,才能产生会话对象,可以调用Open来打开数据源的连接。

CSession类

CSession所创建的对象代表了一个单独的数据库访问的会话。一个用CDataSource类产生的数据源对象可以创建一个或者多个会话,要在数据源对象上产生一个会话对象,需要调用函数Open()来打开。同时,会话对象还可用于创建事务操作。

CEnumeratorAccessor类

CEnumeratorAccessor类是用来访问枚举器查询后所产生的行集中可用数据提供程序的信息的访问器,可提供当前可用的数据提供程序和可见的访问器。

访问器类

CAcessor类

CAccessor类代表与访问器的类型。当用户知道数据库的类型和结构时,可以使用此类。它支持对一个行集采用多个访问器,并且,存放数据的缓冲区是由用户分配的。

CDynamicAccessor类

关于c 数据库参数传递的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » C语言中数据库参数传递方法简介 (c 数据库参数传递)