请问VC++中如何连接odbc数据源,具体步骤!谢谢!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问VC++中如何连接odbc数据源,具体步骤!谢谢!相关的知识,希望对你有一定的参考价值。

1.先创建数据库,在控制面板的管理工具.数据源
2. ADO技术
ActiveX Data Object, ActiveX数据对象。
ADO建立在OLE DB之上,采用ADO技术访问数据库的话,实际的调用过程是:ADO客户程序通过ADO再访问OLE DB提供的程序,这样访问速度就要慢一些。
如果某个关系型数据库没有OLE DB的提供程序,那么可以利用ODBC的OLE DB提供程序去访问ODBC,然后利用ODBC再去访问支持ODBC的数据库。
2.1 条件
l 头文件和动态库的加载
#include <comdef.h>
#include <atlbase.h>
#pragma warning(disable:4146)
#import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" named_guids rename("EOF","adoEOF"), rename("BOF","adoBOF")
#pragma warning(default:4146)
using namespace ADODB;
l COM组件的加载
if ( CoInitialize( NULL ) != 0 )

AfxMessageBox( _T( "初始化Com库失败!" ) );
return FALSE;

l 变量的声明
_ConnectionPtr m_pConnection;
2.2 连接数据库
m_pConnection.CreateInstance( __uuidof(Connection) );
m_pConnection->ConnectionString = _T( "DSN=PostgreSQL30W;UID=PostGre;PWD=PostGre" );
HRESULT hr = m_pConnection->Open( _T(""), _T(""), _T(""), adConnectUnspecified );
if ( SUCCEEDED( hr ) )

AfxMessageBox( _T( "连接数据库成功!" ) );

2.3 访问数据库
_CommandPtr pCommand(__uuidof(Command));
_RecordsetPtr pRecordset( __uuidof(Recordset) );
CString strSQL = _T( "select * from \\"pg_getProductInfo\\"()" );

try

pCommand->ActiveConnection=m_pConnection;
pCommand->CommandText=_bstr_t(strSQL);
pRecordset=pCommand->Execute(NULL,NULL,adCmdText);

catch (_com_error & e)

AfxMessageBox(e.Description());
return ;


_variant_t var;
int nRecordNum = pRecordset->GetRecordCount();
while( !pRecordset->GetadoEOF() )

TAG_PRODUCTINFO tagProductInfo;

// ID
var = pRecordset->GetCollect( _T( "ID" ) );
tagProductInfo.nProductID= var.intVal;
// Name
var = pRecordset->GetCollect( _T( "Name" ) );
tagProductInfo.strProductName = (char*)_bstr_t(var);

m_vecProductInfo.push_back( tagProductInfo );

pRecordset->MoveNext();


pRecordset->Close();
pRecordset.Release();
参考技术A dim conn
dim connstr
dim db
db="test.mdb"
Set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
conn.Open connstr
%>
连接SQl 库:

dim connweb
set connweb=server.createobject("ADODB.connection")
connweb.open "PROVIDER=SQLOLEDB;DATA SOURCE=127.0.0.1;UID=sa;PWD=密码;DATABASE=数据库名称"

请问如何配置ODBC连接远程的SQL Server数据库?

我的系统是XP,数据库是SQL Server 2000,在本机上配置ODBC时没问题,然后在局域网内别的电脑上配置ODBC,想连到我电脑的数据库上,就总是提示"数据库不存在或拒绝访问".
但是在ODBC选择服务器的时候,下拉列表中又能自动找到我电脑上的数据库,其他设置都和本地一样,就是过了那个输入数据库的登陆名和密码的窗口,点击下一步,等很久,就出现那个错误,请问是怎么回事啊?怎么才能配置好?望详细一点,解决了问题,分数还会加.
连接失败:
SQLSTATE:'01000'
SQL Server 错误:2
[Microsoft][ODBC SQL Server Driver][Share Memory]ConnectionOpen (Connect()).
连接失败:
SQLState:'08001'
SQL Server 错误:17
[Microsoft][ODBC SQL Server Driver][Share Memory]SQL Server 不存在或访问被拒绝
这就是他提示的出错信息.请高手指导!
好像不是防火墙的问题,我把防火墙都关了,还是不行……

这好像不是你数据库设置的问题,而是局域网的问题,你试试看,在控制面板>管理工具>本地安全策略,中启动你和对方的guest帐号,网络访问方式改为经典-本地访问 ,在拒绝从网络访问这台计计算机中删除所有的,拒绝做为服务器登陆中清空所有的,然后关闭windows防火墙,

局域网内winXP(professional)的访问是个经常困扰大家的不大不小的问题,上次说我不够详细,你现在可以按以下的方法试一下,如果不成功,也可照此方法来解决局域网中经常出现的莫名奇妙的错误!!!我也是做DBMS的,出现的很多问题,貌似数据库故障,其实不然!!
一、首先启用guest来宾帐户;
二、控制面板→管理工具→本地安全策略→本地策略→用户权利指派里,“从网络访问此计算机”中加入guest帐户,而“拒绝从网络访问这台计算机”中删除guest帐户;
三、我的电脑→工具→文件夹选项→查看→去掉“使用简单文件共享(推荐)”前的勾;
四、设置共享文件夹;
五、控制面板→管理工具→本地安全策略→本地策略→安全选项里,把“网络访问:本地帐户的共享和安全模式”设为“仅来宾-本地用户以来宾的身份验证”(可选,此项设置可去除访问时要求输入密码的对话框,也可视情况设为“经典-本地用户以自己的身份验证”);
六、右击“我的电脑”→“属性”→“计算机名”,该选项卡中有没有出现你的局域网工作组名称,如“work”等。然后单击“网络 ID”按钮,开始“网络标识向导”:单击“下一步”,选择“本机是商业网络的一部分,用它连接到其他工作着的计算机”;单击“下一步”,选择“公司使用没有域的网络”;单击“下一步”按钮,然后输入你的局域网的工作组名,如“work”,再次单击“下一步”按钮,最后单击“完成”按钮完成设置。

一般经过以上步骤,基本可以解决。如果不行,再往下看:
七、检查本地连接是否被禁用,右击“本地连接”→“启用”;
八、关闭网络防火墙;
九、检查是否启用了域,是否加入了该域并检查域设置;
十、检查是否关闭了server服务;
十一、检查本地连接IP、子网掩码、网关及DNS设置是否有误;
十二、“本地连接”→属性→常规,检查是否安装了“Microsoft网络文件和打印机共享”、“Microsoft网络客户端”以及TCP/IP协议;
十三、某些局域网游戏和软件须安装NetBEUI协议。而且网上有文章说,在小型局域网中,微软在WinXP中只支持的TCP/IP协议和NWLink IPX/SPX/NetBIOS兼容协议表现不尽如人意,在小型局域网(拥有200台左右电脑的网络)中NetBEUI是占用内存最少、速度最快的一种协议。
安装方法:

①放入Windows XP安装光盘,到“valueaddMsft et etbeui”目录下将Netnbf.inf复制C:\Windows\INF中;

②将Nbf.sys复制到C:\Windows\System32\Drivers中;

③开始→控制面板→网上邻居”→“网络连接”→“本地连接”(就是你目前使用中的局域网连接)上按右键→“属性”→“常规”→“安装”→“通讯协议”→→“添加”,此时就可以看到“NetBEUI Protocol”这一项(此项原来是没有的),选取NetBEUI之后,按确定就OK了。

十四、作为网络浏览服务器的电脑由于病毒、配置低运行慢以及死机等原因导致网络上的计算机列表得不到更新,使得某些机器有时候在网上邻居中找不到。

解决办法:最简单的办法是重启各种网络设备和电脑,或者关闭个别有上述问题的电脑上的网络浏览服务器功能,方法如下:
win2000/XP下禁用Computer Browser服务

十五、给系统打上补丁。WinXP访问网上邻居的速度较慢,这是WinXP的一个Bug,当我们打开网上邻居时,操作系统首先会从计划任务中进行查找,因此就大大影响了访问的速度,除非您已经安装了SP1补丁才不会存在这个问题。

可以手工解决这一问题。从注册表中找到“\HKEY_LOCAL_MACHINE\
SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RemoteComputer\NameSpace”,这里有一个名为“D6277990-4C6A-11CF-8D87-00AA0060F5BF”的子键,该子键指向“计划任务(Scheduled Tasks)”,将它直接删除即可。

十六、先卸载网卡驱动,重启再重装;

十七、硬件问题,检查网卡、网线、集线器、路由器等,在检查之前,最好先重启一下网络设备(集线器、交换机、路由器)看能否解决;

十八、病毒(木马)原因。升级病毒库安全模式下全盘杀毒。
参考技术A 这好像不是你数据库设置的问题,而是局域网的问题,你试试看,在控制面板>管理工具>本地安全策略,中启动你和对方的guest帐号,网络访问方式改为经典-本地访问 ,在拒绝从网络访问这台计计算机中删除所有的,拒绝做为服务器登陆中清空所有的,然后关闭windows防火墙,

局域网内winXP(professional)的访问是个经常困扰大家的不大不小的问题,上次说我不够详细,你现在可以按以下的方法试一下,如果不成功,也可照此方法来解决局域网中经常出现的莫名奇妙的错误!!!我也是做DBMS的,出现的很多问题,貌似数据库故障,其实不然!!
一、首先启用guest来宾帐户;
二、控制面板→管理工具→本地安全策略→本地策略→用户权利指派里,“从网络访问此计算机”中加入guest帐户,而“拒绝从网络访问这台计算机”中删除guest帐户;
三、我的电脑→工具→文件夹选项→查看→去掉“使用简单文件共享(推荐)”前的勾;
四、设置共享文件夹;
五、控制面板→管理工具→本地安全策略→本地策略→安全选项里,把“网络访问:本地帐户的共享和安全模式”设为“仅来宾-本地用户以来宾的身份验证”(可选,此项设置可去除访问时要求输入密码的对话框,也可视情况设为“经典-本地用户以自己的身份验证”);
六、右击“我的电脑”→“属性”→“计算机名”,该选项卡中有没有出现你的局域网工作组名称,如“work”等。然后单击“网络 ID”按钮,开始“网络标识向导”:单击“下一步”,选择“本机是商业网络的一部分,用它连接到其他工作着的计算机”;单击“下一步”,选择“公司使用没有域的网络”;单击“下一步”按钮,然后输入你的局域网的工作组名,如“work”,再次单击“下一步”按钮,最后单击“完成”按钮完成设置。

一般经过以上步骤,基本可以解决。如果不行,再往下看:
七、检查本地连接是否被禁用,右击“本地连接”→“启用”;
八、关闭网络防火墙;
九、检查是否启用了域,是否加入了该域并检查域设置;
十、检查是否关闭了server服务;
十一、检查本地连接IP、子网掩码、网关及DNS设置是否有误;
十二、“本地连接”→属性→常规,检查是否安装了“Microsoft网络文件和打印机共享”、“Microsoft网络客户端”以及TCP/IP协议;
十三、某些局域网游戏和软件须安装NetBEUI协议。而且网上有文章说,在小型局域网中,微软在WinXP中只支持的TCP/IP协议和NWLink IPX/SPX/NetBIOS兼容协议表现不尽如人意,在小型局域网(拥有200台左右电脑的网络)中NetBEUI是占用内存最少、速度最快的一种协议。
安装方法:

①放入Windows XP安装光盘,到“valueaddMsft et etbeui”目录下将Netnbf.inf复制C:\Windows\INF中;

②将Nbf.sys复制到C:\Windows\System32\Drivers中;

③开始→控制面板→网上邻居”→“网络连接”→“本地连接”(就是你目前使用中的局域网连接)上按右键→“属性”→“常规”→“安装”→“通讯协议”→→“添加”,此时就可以看到“NetBEUI Protocol”这一项(此项原来是没有的),选取NetBEUI之后,按确定就OK了。

十四、作为网络浏览服务器的电脑由于病毒、配置低运行慢以及死机等原因导致网络上的计算机列表得不到更新,使得某些机器有时候在网上邻居中找不到。

解决办法:最简单的办法是重启各种网络设备和电脑,或者关闭个别有上述问题的电脑上的网络浏览服务器功能,方法如下:
win2000/XP下禁用Computer Browser服务

十五、给系统打上补丁。WinXP访问网上邻居的速度较慢,这是WinXP的一个Bug,当我们打开网上邻居时,操作系统首先会从计划任务中进行查找,因此就大大影响了访问的速度,除非您已经安装了SP1补丁才不会存在这个问题。

可以手工解决这一问题。从注册表中找到“\HKEY_LOCAL_MACHINE\
SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RemoteComputer\NameSpace”,这里有一个名为“D6277990-4C6A-11CF-8D87-00AA0060F5BF”的子键,该子键指向“计划任务(Scheduled Tasks)”,将它直接删除即可。

十六、先卸载网卡驱动,重启再重装;

十七、硬件问题,检查网卡、网线、集线器、路由器等,在检查之前,最好先重启一下网络设备(集线器、交换机、路由器)看能否解决;

十八、病毒(木马)原因。升级病毒库安全模式下全盘杀毒。

参考资料:经验

本回答被提问者采纳
参考技术B 一定要用ODBC吗??
其实OLE
DB的连接方式更快捷
而且查询速度都毕竟方便.
不过你最好看看你的用户名和密码有无弄错..
连接数据库和防火墙无关..........
参考技术C 其它都不用改

只要把你电脑上的安装的防火墙和

XP自带的防火墙全关了就行了

SQLSERVER的1433端口防火墙默认是不开的

不明白的话可以信息给我

以上是关于请问VC++中如何连接odbc数据源,具体步骤!谢谢!的主要内容,如果未能解决你的问题,请参考以下文章

请问如何配置ODBC连接远程的SQL Server数据库?

如何提高使用ODBC连接MYSQL数据库的效率?

请问大家在visual studio2010中如何通过代码连接MySQL数据库。通过设置连接字符串的那种

请教VC如何与MYSQL连接?

如何使用odbc连接数据库?

odbc数据源有啥用