VC6.0怎么与SQL2008连接?

gongzhi493712874 2010-11-15 07:15:39
VC6.0怎么与SQL2008连接?我说的是怎么配置 最好有图 谢谢 强力感谢
...全文
3227 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
nextseconds 2013-07-29
  • 打赏
  • 举报
回复
引用 7 楼 QJeremy 的回复:
拿ADO连:步骤如下: 1、导入库文件 使用ADO前必须在工程的stdafx.h文件最后用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下: #import "C:\Program Files\common files\system\ado\msado15.dll" no_namespace rename("EOF","EndOfFile") rename("BOF","FirstOfFile") ADO类的定义是作为一种资源存储在ADO DLL(msado15.dll)中,在其内部称为类型库。 类型库描述了自治接口,以及C++使用的COM vtable接口。 当使用#import指令时,在运行时Visual C++需要从ADO DLL中读取这个类型库, 并以此创建一组C++头文件。这些头文件具有.tli 和.tlh扩展名,#import引入ADO库文件的代码编译后,在项目的目录下生成了这两个文件。在C++程序代码中调用的ADO类要在这些文件中定义。 程序的第三行指示ADO对象不使用名称空间,在有些应用程序中, 由于应用程序中的对象与ADO中的对象之间可能会出现命名冲突,所以有必要使用名称空间。 如果要使用名称空间,则可把第三行程序修改为: rename_namespace("AdoNS")。 第四行代码将ADO中的EOF(文件结束)更名为adoEOF,因为文件的结尾也是以EOF结尾的,是为了避免与定义了自己的EOF的其他库冲突。 至于改为什么名字,可以根据自己的命名习惯自己确定。 2、初始化COM环境 OLE DB 是基于COM技术编写的,ADO是OLE DB基础之上的用户程序, OLE DB是一个COM组件,在访问COM组件的时候需要初始化COM库,方法如下: (1) ::CoInitialize(NULL); //初始化OLE/COM库环境 //对数据库的访问在上下代码之间写,下面第三步就应该写在这里 ::CoUninitialize();//既然初始化了环境,当然一定要记得释放他了 (2)也可以调用MFC全局函数 AfxOleInit(); 3、三大指针对象的定义和创建实例 (1) _ConnectionPtr pConnection("ADODB.Connection"); _RecordsetPtr pRecordset("ADODB.Recordset"); _CommandPtr pCommand("ADODN.Command"); (2) _ConnectionPtr pConnection; _RecordsetPtr pRecordset; _CommandPtr pCommand; pConnection.CreateInstance(__uuidof(Connection)); pRecordset.CreateInstance(__uuidof(Recordset)); pCommand.CreateInstance(__uuidof(Command)); 要产生一个智能指针对象,其实在定义的同时也可以初始化,如: _ConnectionPtr pConnection(__uuidof(Connection)); _ConnectionPtr 是智能指针 __uuidof() 用来获取Connection全局唯一标识符 (3) _ConnectionPtr pConnection; _RecordsetPtr pRecordset; _CommandPtr pCommand; pConnection.CreateInstance("ADODB.Connection"); pRecordset.CreateInstance("ADODB.Recordset"); pCommand.CreateInstance("ADODB.Command"); 4、打开一个连接 pConnection->ConnectionString = "这里的字符串有下面四种写法";//对连接字符串赋值 pConnection->Open(ConnectionString,"","",adModeUnknown); //连接数据库 第二三个参数分别为用户的ID与密码, 因为在连接字符串ConnectionCstring中已经设置好了,这里可以为空。 第四个参数可以取下面两个参数: adAsyncConnect 异步打开数据库,在ASP中直接用16 adConnectUnspecified 同步打开数据库,在ASP中直接用-1 ConnectionString根据不同的数据源,分别对应不同的写法 (要记下来很困难,可以在VB中利用ADO控件先连接好,再将其拷贝在VC中,这样不容易出错) 1) 访问Access 2000 "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=databaseName;User ID=userName;Password=userPassWord" 2) 访问ODBC数据 "Provider=MADASQL;DSN=dsnName;UID=userName;PWD=userPassword;" 3) 访问Oracle数据库 “Provider=MSDAORA;Data Sourse=serverName;User ID=userName;Password=userPassword;" 4) 访问MS SQL数据库 "Provider=SQLOLEDB,Data Source=serverName;Initial Catalog=databaseName;User ID=userName;Password=userPassword;" 5、执行SQL命令,得到数据 方法1: pRecordset = pConnection->Execute("Select * from authors",NULL,adCmdText); 方法2: pRecordset ->Open("Select * from authors",_ variant_t((Idispacth*) pConnection), //设置活动连接 adOpenDynamtic, //游标类型 adLockOptimistic, //锁的类型 adCmdText); 方法3: pCommand->put_ActiveConnection(_variant_t((Idispatch *) pConn); pCommand->CommandText = "Select * from authors"; pRecordset = pCmd->Execute(NULL,NULL,adCmdText); 得到数据之后,做一个循环取得数据: While (!pRecordset ->adoEOF) { Str = pRecordset->GetCollect("au_lname")); //bstr_t b_user=m_pRes->Fields->GetItem("USERNAME")->Value;(这也一样) pRst->MoveNext(); } SQL命令比较多,但是不去考虑细节,这里只说出通用的方法 CString strSQL;//定义SQL命令串,用来保存SQL语句 strSQL.Format("SQL statement"); 然后在每个要用到SQL命令串的方法中,使用strSQL.AllocSysString()的方法进行类型转换 6、com的专用数据类型 variant ,bstr ,SafeArray variant变量的范围包括很多,它是一种变体类型,主要用于支持自动化的语言访问, 从而在VB中非常方便地使用,但是VC中比较复杂,它使用_variant_t 进行管理 bstr是一种字符串变量,使用_bstr_t进行管理,这个类重载了char *操作符 7、关闭连接 if(pConnection->State); //不能多次关闭,否则会出现错误 pConnection->Close(); pRecordset->Close(); pCommand.Release(); pConnection.Release(); //释放引用计数 pRecordset.Release(); 注意:调用Close()时用"->",调用Release()时要用".",为什么? 因为智能指针,_ConnectionPtr是一个重载了->运算符的类 _ConnectionPtr:它是一个接口指针模板。'.'是模板_com_ptr的函数。->是'接口函数'调用。 //forexample: _ConnectionPtr m_Conn; m_Conn.CreateInstance(....);//Createinterfaceinstance. m_Conn->Open(...);//Openaconnectiontodatabase. '->'是_com_ptr重载了的运算符.目的就是为了让你调用模板参数的函数. 8、结构化异常处理 ADO封装了COM接口,所以需要进行错误处理 如下例: HRESULT hr; try { hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象 if(SUCCEEDED(hr)) { hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);///连接数据库 ///上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为:Provider=Microsoft.Jet.OLEDB.3.51; } } catch(_com_error e)///捕捉异常 { CString errormessage; errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage()); AfxMessageBox(errormessage);///显示错误信息 } 这里介绍了三种对象通过ADO访问数据库,它们都可以执行SQL语句获取数据,但不是管那种方法获取数据,最终都将数据放置到记录集对象当中。
ADO都被你说完咯
hello666699 2013-05-28
  • 打赏
  • 举报
回复
楼上说的是DAO还是ADO啊??????????
静c心 2012-10-14
  • 打赏
  • 举报
回复
vc++深入详解上有例子
lionetsoft 2012-10-10
  • 打赏
  • 举报
回复
不论是SQL SERVER 2008,还是2005,2000 ,也不管是VC6。0,VC7。0,VC8。0,VC在调用SQL SERVER都是完全是一样的
lionetsoft 2012-10-10
  • 打赏
  • 举报
回复
楼上已很详细了,直接用ADO,最好不要用ODBC
Cyuanyan 2012-10-07
  • 打赏
  • 举报
回复
LS说的都很好的,LZ看看就应该会了的,还有你要把你的数据库配置一下设置成SQL Srerver认证方式等等,才不会错
vc8fans 2012-10-07
  • 打赏
  • 举报
回复
用ADO,,没问题的
Harper 2012-10-06
  • 打赏
  • 举报
回复



"Provider=SQLOLEDB,Data Source=serverName;Initial Catalog=databaseName;User ID=userName;Password=userPassword;"
Deeeeeeeeee 2012-09-17
  • 打赏
  • 举报
回复
这个实践过???[Quote=引用 11 楼 的回复:]

我用VC++6.0和SQL Server2008连,使用上面的方法连不上
[/Quote]
iswjh 2012-06-22
  • 打赏
  • 举报
回复
要看用ODBC,还是OLEDB了,不一样的
niuxia127 2012-06-18
  • 打赏
  • 举报
回复
GOOD
王林森 2012-06-10
  • 打赏
  • 举报
回复
http://blog.csdn.net/zyq5945/article/details/5586423

看这个,你就发现这个方法真好,只要你记住了扩展名.udl
westkingwang 2011-10-29
  • 打赏
  • 举报
回复
我也想知道这个问题
xingcui2005 2011-10-18
  • 打赏
  • 举报
回复
我用VC++6.0和SQL Server2008连,使用上面的方法连不上
谁学逆向工程 2011-01-22
  • 打赏
  • 举报
回复
没有讲连接的书吗
LICHUNLI1022 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qjeremy 的回复:]
拿ADO连:步骤如下:

1、导入库文件

使用ADO前必须在工程的stdafx.h文件最后用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下:
#import "C:\Program Files\common files\system\ado\msado15.dll" no_namespace rename("EOF","EndOfFile") renam……
[/Quote]
很好很详细
Nakumi2012 2010-11-27
  • 打赏
  • 举报
回复
拿ADO连:步骤如下:

1、导入库文件

使用ADO前必须在工程的stdafx.h文件最后用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下:
#import "C:\Program Files\common files\system\ado\msado15.dll" no_namespace rename("EOF","EndOfFile") rename("BOF","FirstOfFile")

ADO类的定义是作为一种资源存储在ADO DLL(msado15.dll)中,在其内部称为类型库。
类型库描述了自治接口,以及C++使用的COM vtable接口。
当使用#import指令时,在运行时Visual C++需要从ADO DLL中读取这个类型库,
并以此创建一组C++头文件。这些头文件具有.tli 和.tlh扩展名,#import引入ADO库文件的代码编译后,在项目的目录下生成了这两个文件。在C++程序代码中调用的ADO类要在这些文件中定义。
程序的第三行指示ADO对象不使用名称空间,在有些应用程序中,
由于应用程序中的对象与ADO中的对象之间可能会出现命名冲突,所以有必要使用名称空间。
如果要使用名称空间,则可把第三行程序修改为: rename_namespace("AdoNS")。
第四行代码将ADO中的EOF(文件结束)更名为adoEOF,因为文件的结尾也是以EOF结尾的,是为了避免与定义了自己的EOF的其他库冲突。 至于改为什么名字,可以根据自己的命名习惯自己确定。


2、初始化COM环境
OLE DB 是基于COM技术编写的,ADO是OLE DB基础之上的用户程序,
OLE DB是一个COM组件,在访问COM组件的时候需要初始化COM库,方法如下:
(1) ::CoInitialize(NULL); //初始化OLE/COM库环境
//对数据库的访问在上下代码之间写,下面第三步就应该写在这里
::CoUninitialize();//既然初始化了环境,当然一定要记得释放他了
(2)也可以调用MFC全局函数
AfxOleInit();

3、三大指针对象的定义和创建实例

(1)
_ConnectionPtr pConnection("ADODB.Connection");
_RecordsetPtr pRecordset("ADODB.Recordset");
_CommandPtr pCommand("ADODN.Command");

(2)
_ConnectionPtr pConnection;
_RecordsetPtr pRecordset;
_CommandPtr pCommand;

pConnection.CreateInstance(__uuidof(Connection));
pRecordset.CreateInstance(__uuidof(Recordset));
pCommand.CreateInstance(__uuidof(Command));

要产生一个智能指针对象,其实在定义的同时也可以初始化,如:
_ConnectionPtr pConnection(__uuidof(Connection));
_ConnectionPtr 是智能指针
__uuidof() 用来获取Connection全局唯一标识符

(3)
_ConnectionPtr pConnection;
_RecordsetPtr pRecordset;
_CommandPtr pCommand;

pConnection.CreateInstance("ADODB.Connection");
pRecordset.CreateInstance("ADODB.Recordset");
pCommand.CreateInstance("ADODB.Command");

4、打开一个连接
pConnection->ConnectionString = "这里的字符串有下面四种写法";//对连接字符串赋值
pConnection->Open(ConnectionString,"","",adModeUnknown); //连接数据库
第二三个参数分别为用户的ID与密码,
因为在连接字符串ConnectionCstring中已经设置好了,这里可以为空。
第四个参数可以取下面两个参数:
adAsyncConnect
异步打开数据库,在ASP中直接用16
adConnectUnspecified
同步打开数据库,在ASP中直接用-1

ConnectionString根据不同的数据源,分别对应不同的写法
(要记下来很困难,可以在VB中利用ADO控件先连接好,再将其拷贝在VC中,这样不容易出错)
1)
访问Access 2000
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=databaseName;User ID=userName;Password=userPassWord"

2)
访问ODBC数据
"Provider=MADASQL;DSN=dsnName;UID=userName;PWD=userPassword;"

3)
访问Oracle数据库
“Provider=MSDAORA;Data Sourse=serverName;User ID=userName;Password=userPassword;"

4)
访问MS SQL数据库
"Provider=SQLOLEDB,Data Source=serverName;Initial Catalog=databaseName;User ID=userName;Password=userPassword;"

5、执行SQL命令,得到数据
方法1:
pRecordset = pConnection->Execute("Select * from authors",NULL,adCmdText);
方法2:
pRecordset ->Open("Select * from authors",_
variant_t((Idispacth*) pConnection), //设置活动连接
adOpenDynamtic,
//游标类型
adLockOptimistic,
//锁的类型
adCmdText);
方法3:
pCommand->put_ActiveConnection(_variant_t((Idispatch *) pConn);
pCommand->CommandText = "Select * from authors";
pRecordset = pCmd->Execute(NULL,NULL,adCmdText);


得到数据之后,做一个循环取得数据:
While (!pRecordset ->adoEOF)
{
Str = pRecordset->GetCollect("au_lname"));
//bstr_t b_user=m_pRes->Fields->GetItem("USERNAME")->Value;(这也一样)
pRst->MoveNext();
}
SQL命令比较多,但是不去考虑细节,这里只说出通用的方法
CString strSQL;//定义SQL命令串,用来保存SQL语句

strSQL.Format("SQL statement");

然后在每个要用到SQL命令串的方法中,使用strSQL.AllocSysString()的方法进行类型转换

6、com的专用数据类型

variant ,bstr ,SafeArray

variant变量的范围包括很多,它是一种变体类型,主要用于支持自动化的语言访问,
从而在VB中非常方便地使用,但是VC中比较复杂,它使用_variant_t 进行管理
bstr是一种字符串变量,使用_bstr_t进行管理,这个类重载了char *操作符

7、关闭连接

if(pConnection->State); //不能多次关闭,否则会出现错误
pConnection->Close();
pRecordset->Close();
pCommand.Release();
pConnection.Release();
//释放引用计数
pRecordset.Release();


注意:调用Close()时用"->",调用Release()时要用".",为什么?
因为智能指针,_ConnectionPtr是一个重载了->运算符的类

_ConnectionPtr:它是一个接口指针模板。'.'是模板_com_ptr的函数。->是'接口函数'调用。
//forexample:
_ConnectionPtr m_Conn;
m_Conn.CreateInstance(....);//Createinterfaceinstance.
m_Conn->Open(...);//Openaconnectiontodatabase.

'->'是_com_ptr重载了的运算符.目的就是为了让你调用模板参数的函数.

8、结构化异常处理
ADO封装了COM接口,所以需要进行错误处理
如下例:
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr))
{
hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);///连接数据库
///上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为:Provider=Microsoft.Jet.OLEDB.3.51; }
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}

这里介绍了三种对象通过ADO访问数据库,它们都可以执行SQL语句获取数据,但不是管那种方法获取数据,最终都将数据放置到记录集对象当中。
宇宙漫步者 2010-11-27
  • 打赏
  • 举报
回复
支持4楼,ADO方面,以下是我连接成功的字符串:
"Driver=SQL Server;Database=HrSys;Server=FANGANG-PC\\SQLEXPRESS;User ID=YOURNAME;Password=YOURPASSWORD;"
shiter 2010-11-26
  • 打赏
  • 举报
回复
连接字符串吧,这样比较方便
zhu_terry 2010-11-25
  • 打赏
  • 举报
回复
配置ODBC数据源我不是太喜欢这样做,喜欢直接用ADO通过连接字符串进行连接,我觉得这样比较直接
加载更多回复(3)

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧