如何实现vc和sql server 2005数据库连接

如何实现vc和sql server 2005数据库连接,第1张

data

source是指数据库所在的服务器地址。

server=localhostuid=testpwd=testdatabase=Northwind

这个就是连接字符串的写法。

要是你比较懒的话就在桌面上建一个文本文档。把文件后缀名改成udl

双击打开。

在提供程序里选一个数据库类型

在连接里第一个写数据库地址。使用指定的id和pass,填完之后勾上允许保存密码。

然后在服务器上选择你要的数据库。

确定

关掉

用记事本打开这个文件。会有这样的东西

[oledb]

Everything

after

this

line

is

an

OLE

DB

initstring

Provider=SQLOLEDB.1Password=testPersist

Security

Info=TrueUser

ID=testInitial

Catalog=NorthwindData

Source=localhost

如果你在程序里指定了数据库类型的话就从Password开始粘贴到最后。没指定就从Provider开始。

一、初始化

首先,在stdafx.h文件中加入:

#import "C:\Program files\common files\System\ado\msado15.dll" no_namespace rename("EOF","EndOfFile")

定义变量

_ConnectionPtr ADOConn

_RecordsetPtr m_pADOSet

二、连接

//SQL SERVER数据库连接

::CoInitialize(NULL)

CString strConnect

strConnect="Provider=sqloledb.1Data Source=192.168.0.131Initial Catalog=mynetUID=saIntegrated Security=SSPI"

//mynet数据库名字,我使用的是非数据源方式

try

{

ADOConn.CreateInstance(__uuidof(Connection))

ADOConn->Open((const char *)strConnect,"","",adModeUnknown)//adConnectUnspecified

}

catch(...)

{

AfxMessageBox("数据库初始化错误,程序将关闭!")

return FALSE

}

三、初始化ADO记录集

m_pADOSet.CreateInstance(__uuidof(Recordset))

_variant_t strSQL

strSQL="select * from kk"

if ( m_pADOSet->State == adStateOpen)

m_pADOSet->Close()

try

{

m_pADOSet->CursorLocation=adUseClient

m_pADOSet->Open("select * from kk", ADOConn.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdUnknown)

}

catch(_com_error &e)

{

CString err

err.Format("ADO Error: %s",(char*)e.Description())

}

int iCount

iCount = m_pADOSet->GetRecordCount()

四、查询数据

_variant_t Holder

int T0

while(!m_pADOSet->EndOfFile)

{

Holder = m_pADOSet->GetCollect("id")

//if(Holder.intVal!=VT_NULL)

T0=Holder.intVal

m_pADOSet->MoveNext()

}

五、添加数据

m_pADOSet->AddNew()

m_pADOSet->PutCollect("id",_variant_t("23"))

m_pADOSet->PutCollect("username",_variant_t("salkfj"))

m_pADOSet->Update()

六、修改数据

m_pADOSet->EditMode

m_pADOSet->PutCollect("id",_variant_t("3"))

m_pADOSet->PutCollect("username",_variant_t("saj123456789"))

m_pADOSet->Update()

七、删除数据

m_pADOSet->Delete(adAffectCurrent)//删除当前记录

八、断开数据库

//释放ADO连接对象

if(adStateOpen == ADOConn->State)

ADOConn->Close()

ADOConn.Release()

// 释放ADO记录集

if(adStateOpen==m_pADOSet->State)

m_pADOSet->Close()

m_pADOSet.Release()

先照下面这个教程的前两步设置好,然后就能调用_ConnectionPtr、_RecordsetPtr和_CommandPtr三个指针。

http://wenku.baidu.com/view/396ffb87d4d8d15abe234e71.html

_ConnectionPtr是用来建立连接的;_RecordsetPtr是用来对数据库记录集进行 *** 作的,记录集说白了就是数据库的一个小的副本,你不能直接 *** 作数据库,所有的 *** 作都是对记录集 *** 作,然后更新,就反应到数据库上边了;_CommandPtr还没用过,一般前两个就够了。

这几个指针虽然还算方便,但是比较繁琐的,我从一本书上找到了几个类将这几个指针重新封装了一下,使用起来更方便了。这本书是《多层结构的数据库应用系统的开发:VC6.0+CSocket+ADO+SQL server 》,书里讲的更详细。

下面是我写的一个例子,不太好,你就参考一下吧。

头文件.h

CSbtAdoCnn m_AdoCnn    //_ConnectionPtr的封装

CSbtAdoRst m_AdoRst    //_RecordsetPtr的封装

源文件.cpp

//数据库 *** 作

CString strSource = m_AdoExc.GetStrSource()    //连接字符串获取,可以直接写,后边那个函数请忽视

CString strUser = m_AdoExc.GetStrUser()    //用户名获取

CString strPwd = m_AdoExc.GetStrPwd()    //密码获取

CString strSQL    //SQL命令,决定了打开什么样的记录集

CSbtStrArr m_FieldValues    //CSbtStrArr是将CStringArray重新封装的一个类,m_FieldValues用存记录集的一行数据

m_AdoCnn.Open(strSource, strUser, strPwd)        //先建立连接

strSQL = "SELECT * FROM mydatabase"

m_AdoRst.Open(                //这几个参数参见CSbtAdoRst里的说明

m_AdoCnn.GetCnnPtr(),

strSQL,

adOpenStatic,

adLockOptimistic,

adCmdText)

m_AdoRst.MoveFirst()    //移到ado记录集第一行

while(!m_AdoRst.IsEOF())

{

m_AdoRst.GetFieldsValue(m_FieldValues)    //取得一行记录

//------------------------------------------

//你的 *** 作

//==========================

m_AdoRst.MoveNext()    //移到下一行

}

m_AdoRst.Close()

m_AdoCnn.Close()


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存