MFC关于数据库的问题

MFC关于数据库的问题,第1张

1,工程->添加工程->添加控件AdoData

2,初始化AdoData控件

3,将DataGrid控件的DataSource绑定为AdoData控件标签

4,分别建立DataGrid和AdoData控件对象DataGrid和AdoBata

完成以上步骤后,便可很方便的进行数据库 *** 作了

SQL="select * from gongzi"

Adodb.SetRecordSource(SQL)

Adodb.Refresh()

DataGrid.Refresh()

只要改变SQL,便可进行任意 *** 作,并将数据显示在DataGrid表格里。

你要显示更新后的数据,只要用ADODC重新读取数据库就行了,只要上面4条语句,具体的位置放在你查询 *** 作完后的任何一个位置。

Adodc是控件,使用的时候要建立一个对象,才能使用啊。

**********首先是连接Access数据库***********

以下在VC6.0环境中都能实现

================ADO方法:==================

|||||针对Access2003:---->参照实例Ado6666.zip文件

//首先要在文件的头部引入一个动态链接库:

#import "c:\program files\common files\system\ado\msado15.dll" \

no_namespace \

rename ("EOF", "adoEOF") \

rename ("BOF","adoBOF")

//连接指针,实例方法一

_ConnectionPtr pConn(__uuidof(Connection))

//连接指针,实例方法二

_ConnectionPtr pConnpConn.CreateInstance(__uuidof(Connection))

//对于ADO的连接,要指定一个Provider和一个数据源

//ADO连接Access的Provider是Microsoft.Jet.OLEDB.4.0而数据源就是一个Access文件

Provider= Microsoft.Jet.OLEDB.4.0

Data Source = ×××.mdb

//调用Open函数打开连接

//Open的第一个参数是连接字符串(ConnectionString),即由Provider和Data Source组成的一个字符串

//第二个和第三个参数是数据源的用户名和密码,如果没有给它们指定,则为空字符串

pConn->Open("","","",adConnectUnspecified)

//打开记录集两种方式

//方式一: 该方式打开一个SQL语句执行的内容,且能够对记录集进行查询、修改、添加和删除

pRset->Open("SELECT * FROM 学生",(_variant_t)((IDispatch*)pConn),adOpenDynamic,adLockOptimistic,adCmdText)

//方式二: 该方式打开一个SQL语句执行的内容,与“方式一”所不同的是,我们只能对其查询

pRset = pConn->Execute("SELECT * FROM 学生",NULL,adCmdText)

//另加说明:还有其他打开方式,如利用_CommandPtr指针对象,也是可以有同样的 *** 作的

//记录集和数据库的练级的关闭

pRset->Close() //关闭

pRset.Release() //释放

pRset = NULL //设其值为NULL,防止到处乱指

pConn->Close() //关闭

pConn.Release() //释放

pConn = NULL //设其值为NULL,防止到处乱指

-------------------------------------------------------------------------------------------

|||||针对Access2007:---->参照实例Ado7777.zip文件

我们知道Access2007文件的后缀名是.accdb,经过测试我们知道,使用Microsoft.Jet.OLEDB.4.0 Provider

已经不能打开数据库,微软给我们提供了一个支持Access2007数据库连接的Provider:Microsoft.ACE.OLEDB.12.0

只是这样还不够,还需要一个数据引擎,我从网上下了一个:AccessDatabaseEngine.exe,安装之后就可以用了。

其他 *** 作和连接Access2003大同小异,没有什么区别。

-------------------------------------------------------------------------------------------

|||||针对SQL Server2005:---->参照实例DBLinkToSS2005.zip文件

对于ADO技术的使用,只要做好连接字符串,其他 *** 作基本相同

对于连接SQL Server2005,主要还是ConnectionString的问题,它的ConnectionString是:

Provider=MSDASQL.1Password=lanchePersist Security Info=TrueUser ID=saData Source=mysqlserver2005dsInitial Catalog=master

这段代码比较长,不容易记住,但是没有必要,有一种简便的方法,可以准确无误地做好连接字符串的准备

方法如下:

1,向对话框中添加两个ActiveX控件:Microsoft ADO Data Control 6.0(SP6)和Microsoft DataGrid Control 6.0(SP6)

要注意的是,在"Insert Active Control"对话框中还有一个与Microsoft DataGrid Control 6.0类似的控件:DBGrid Control,

千万别加错了!

2,打开Microsoft ADO Data Control 6.0(SP6)控件的属性对话框,在标签控件中选择Control标签,点击"Build",将会d出一个数据

连接属性对话框,这里有很多种连接,当然我不可能把所有的情况都说一遍,现在我只说说现在我的做法:

【提供程序】选择Microsoft OLEDB DB Provider for ODBC Drivers【连接】选择一个数据源,如我利用

SQL Server Native Client 10.0驱动程序建立了一个名为"mysqlserver2005ds"数据源

3,如果测试连接成功后,即可以得到一个ConnectionString了

-------------------------------------------------------------------------------------------

|||||针对Oracle 11g:---->参照实例DBLinkToSS2005.zip文件

连接Oracle11g的方法和连接SQL Server2005的方法是一样的,在这里我只给出我做的实例的ConnectionString

Provider=MSDASQL.1Password=lanchePersist Security Info=TrueUser ID=systemData Source=Oracle ODBC for Visual C++

###########################################################################################

备注:

1,其他数据库连接,比如到SQL Server2008(SQL Server2000不必说,因为它已经退出历史舞台),还有Oracle10g,它应该和Oracle11g的连接

方法一样,没什么变化。还有一类数据库,我不想讨论,比如MySQL,DB2等。

2,还有三种连接数据库技术:ODBC,OLE,DAO,这三种方法比较古老,ODBC只是在数据源方面还很有用,至于用它来做数据库开发,是不适宜的;

DAO是建立在OLE之上的一种技术,如今出现了ADO技术,虽说DAO技术在某些方面还是有一些优势,但还是被ADO给淘汰了,据我所知,DAO

已经被淘汰了,目前ADO是使用最广泛也是最便利的技术,所以综合这四种技术,在数据库开发中推荐使用ADO.故不再讨论其他连接技术了

1. 由于使用的是ADO架构 首先需要在StdAfx.h文件中导入msado15.dll 和 oledb32.dll连个动态连接库文件倒入方式为:

#import "msado15.dll" no_namespace rename ("EOF", "adoEOF")

#import "oledb32.dll" no_namespace

两个文件的实际所在位置由于系统安装的位置不同而不同。

no_namespace 使用无名命名空间 程序段比较短关联较少的话可以这样使用 否则请使用命名空间以免发生冲突,

rename ("EOF", "adoEOF") 重命名 EOF为 adoEOF 以免常量冲突。

2. 关于SQL Server以及的一些要求 首先安装SQL Server的机器必须是 NT架构以上的系统 如果使用的是Windows XP SP2 的话需要对SQL Server打上SP4补丁方可网络访问。

3. 最好建立一个单独的数据库 *** 作类 使程序中需要对数据库进行 *** 作的地方继承这个类。

4. 类成员如下

_ConnectionPtr m_pConnection// 数据库

_RecordsetPtrm_pRecordset// 命令

_CommandPtrm_pCommand// 记录

5. 方法如下

bool connect2database()

bool check_user(_bstr_t name, _bstr_t pwd)

bool CBugListCommon::connect2database()

{

_bstr_t ConnectionString = "Provider=sqloledbData Source='SQLSERVER'Integrated Security='SSPI'Initial Catalog='Test'User Id='sa'Password='sa'"

//Data Source 数据库实例名

//Initial Catalog表名

//User Id 用户名

//Password 密码

if(FAILED(CoInitialize(NULL)))

return FALSE

m_pConnection.CreateInstance(__uuidof(Connection))

try

{

m_pConnection->Open(ConnectionString , "", "", adConnectUnspecified)

return TRUE

}

catch(_com_error e)

{

AfxMessageBox("数据库连接失败")

return FALSE

}

return FALSE

}

bool CBugListCommon::check_user(_bstr_t name, _bstr_t pwd)

{

_bstr_t cmdtxt = "SELECT User_Name, User_PassWord FROM User_Table WHERE (User_Name = N'"

cmdtxt = cmdtxt + name + "')"

// cmdtxt == SELECT User_Name, User_PassWord FROM User_Table WHERE (User_Name = N'name')

m_pCommand.CreateInstance("ADODB.Command")

m_pCommand->ActiveConnection = m_pConnection

m_pCommand->CommandText = cmdtxt

m_pRecordset = m_pCommand->Execute(NULL, NULL, adCmdText)

if(!m_pRecordset->adoEOF)

{

_bstr_t tn

tn = m_pRecordset->GetCollect("User_PassWord")

if(tn == pwd)

return TRUE

else

return FALSE

}

return FALSE

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9644051.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存