VC++ 2005连接数据库

最近在做一个项目需要进行数据库的链接。手头上的资料都是VC6的,而我们这个项目使用的是VC++2005,所以略有差别。在纠结了很久之后,问题终于得到了解决!

 

其实问题有如下几个:

1.导入msado15.dll的时候提示出错。

   解决方法:首先,#import这条语句放置的位置,应该放到stdafx.h里面。我放置的位置是:

// Database支持
#import "C://Program Files//Common Files//System//ado//msado15.dll" no_namespace rename("EOF", "rsEOF")


//#ifndef _AFX_NO_DB_SUPPORT
//#include <afxdb.h>   // MFC ODBC 数据库类
//#endif // _AFX_NO_DB_SUPPORT

//#ifndef _AFX_NO_DAO_SUPPORT
//#include <afxdao.h>   // MFC DAO 数据库类
//#endif // _AFX_NO_DAO_SUPPORT

    在自动生成的afxdb.h和afxdao.h头文件之前,并且把自动生成的链接注释掉了!不然会提示重定义WINDOWS.H

 

2.数据库连接的代码:

   首先初始化COM,然后创建对象(Connection和ResultSet)

代码为:

if( S_OK != CoInitialize(NULL))
  {
   AfxMessageBox(L"COM组件初始化错误");
  }
  _ConnectionPtr pConn(__uuidof(Connection));
  _RecordsetPtr pRst(__uuidof(Recordset));

  try
  {
     pConn -> Open(_bstr_t("Driver={SQL Native Client};Server=(local)//SQLEXPRESS;Database=AntiyDatabase;Trusted_Connection=yes"), _bstr_t(""), _bstr_t(""), adConnectUnspecified);
  }
  catch (_com_error e)
  {
   CString errormessage;
   errormessage.Format(L"Warning: 连接数据库发生异常,错误信息:%s,文件:%S,行:%d/n", e.ErrorMessage(), __FILE__, __LINE__);
   AfxMessageBox(errormessage);
  }
//以下为对数据库的操作

// ...

 

3.连接字符串:

    由于我以前使用C#连接字符串的时候都是直接拷贝IDE自动提供的连接字符串的,所以这次想都没想就这么做了,结果出现了IDispatch error #3105这个问题,Open连接的时候就会提示错误。后来我上网查找了一篇文章,根据里面的讲解,修改了连接字符串就成功了!修改后的字符串为:"Driver={SQL Native Client};Server=(local)//SQLEXPRESS;Database=AntiyDatabase;Trusted_Connection=yes"

 

 

---------------------------------------------------------我是低调的分割线--------------------------------------------------------

附:转自博客园的关于连接字符串的文章:

SQL Native Client ODBC Driver
 
标准安全连接
   
Driver={SQL Native Client};Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
 
您是否在使用SQL Server 2005 Express? 请在“Server”选项使用连接表达式“主机名称/SQLEXPRESS”。 
  
受信的连接
   
Driver={SQL Native Client};Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes;
 
"Integrated Security=SSPI" 与 "Trusted_Connection=yes" 是相同的。
  
连接到一个SQL Server实例
指定服务器实例的表达式和其他SQL Server的连接字符串相同。  
Driver={SQL Native Client};Server=myServerName/theInstanceName;Database=myDataBase;Trusted_Connection=yes;
 
   
指定用户名和密码
oConn.Properties("Prompt") = adPromptAlways

Driver={SQL Native Client};Server=myServerAddress;Database=myDataBase;
 
   
使用MARS (multiple active result sets)
   
Driver={SQL Native Client};Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes;MARS_Connection=yes;
 
"MultipleActiveResultSets=true"与MARS_Connection=yes"是相同的。
使用ADO.NET 2.0作为MARS的模块。 MARS不支持ADO.NET 1.0和ADO.NET 1.1。
  
验证网络数据
   
Driver={SQL Native Client};Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes;Encrypt=yes;
 
   
使用附加本地数据库文件的方式连接到本地SQL Server Express实例
   
Driver={SQL Native Client};Server=./SQLExpress;AttachDbFilename=c:/asd/qwe/mydbfile.mdf; Database=dbname;Trusted_Connection=Yes;
 
为何要使用Database参数?如果同名的数据库已经被附加,那么SQL Server将不会重新附加。 
  
使用附加本地数据文件夹中的数据库文件的方式连接到本地SQL Server Express实例
   
Driver={SQL Native Client};Server=./SQLExpress;AttachDbFilename=|DataDirectory|mydbfile.mdf; Database=dbname;Trusted_Connection=Yes;
 
为何要使用Database参数?如果同名的数据库已经被附加,那么SQL Server将不会重新附加。
  
数据库镜像
Data Source=myServerAddress;Failover Partner=myMirrorServer;Initial Catalog=myDataBase;Integrated Security=True;
 
 
  
SQL Native Client OLE DB Provider
 
标准连接
   
Provider=SQLNCLI;Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
 
您是否在使用SQL Server 2005 Express? 请在“Server”选项使用连接表达式“主机名称/SQLEXPRESS”。 
  
受信的连接
   
Provider=SQLNCLI;Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes;
 
"Integrated Security=SSPI"与"Trusted_Connection=yes"相同
  
连接到SQL Server实例
指定服务器实例的表达式和其他SQL Server的连接字符串相同。  
Provider=SQLNCLI;Server=myServerName/theInstanceName;Database=myDataBase;Trusted_Connection=yes;
 
   
使用帐号和密码
oConn.Properties("Prompt") = adPromptAlways

oConn.Open "Provider=SQLNCLI;Server=myServerAddress;DataBase=myDataBase;
 
   
使用MARS (multiple active result sets)
   
Provider=SQLNCLI;Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes;MarsConn=yes;
 
"MultipleActiveResultSets=true"和"MARS_Connection=yes"是相同的。
使用ADO.NET 2.0作为MARS的模块。 MARS不支持ADO.NET 1.0和ADO.NET 1.1。
  
验证网络数据
   
Provider=SQLNCLI;Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes;Encrypt=yes;
 
   
使用附加本地数据库文件的方式连接到本地SQL Server Express实例
   
Provider=SQLNCLI;Server=./SQLExpress;AttachDbFilename=c:/asd/qwe/mydbfile.mdf; Database=dbname;Trusted_Connection=Yes;
 
为何要使用Database参数?如果同名的数据库已经被附加,那么SQL Server将不会重新附加。
  
使用附加本地数据文件夹中的数据库文件的方式连接到本地SQL Server Express实例
   
Provider=SQLNCLI;Server=./SQLExpress;AttachDbFilename=|DataDirectory|mydbfile.mdf; Database=dbname;Trusted_Connection=Yes;
 
为何要使用Database参数?如果同名的数据库已经被附加,那么SQL Server将不会重新附加。
  
数据库镜像
Data Source=myServerAddress;Failover Partner=myMirrorServer;Initial Catalog=myDataBase;Integrated Security=True;
 
 
  
SqlConnection (.NET)
 
标准连接
   
Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;
 
使用serverName/instanceName作为数据源可以指定SQL Server实例。
您是否在使用SQL Server 2005 Express? 请在“Server”选项使用连接表达式“主机名称/SQLEXPRESS”。 
  
Standard Security alternative syntax
Server=myServerAddress;Database=myDataBase;User ID=myUsername;Password=myPassword;Trusted_Connection=False;
 
   
受信任的连接
   
Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;
 
   
Trusted Connection alternative syntax
Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;
 
   
连接到一个SQL Server的实例
指定服务器实例的表达式和其他SQL Server的连接字符串相同。  
Server=myServerName/theInstanceName;Database=myDataBase;Trusted_Connection=True;
 
   
来自WinCE设备的安全连接
Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;User ID=myDomain/myUsername;Password=myPassword;
 
仅能用于CE设备。
  
带有IP地址的连接
   
Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword;
 
 
  
使用MARS (multiple active result sets)
   
Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;MultipleActiveResultSets=true;
 
使用ADO.NET 2.0作为MARS的模块。 MARS不支持ADO.NET 1.0和ADO.NET 1.1。
  
使用附加本地数据库文件的方式连接到本地SQL Server Express实例
   
Server=./SQLExpress;AttachDbFilename=c:/asd/qwe/mydbfile.mdf;Database=dbname;Trusted_Connection=Yes;
 
为何要使用Database参数?如果同名的数据库已经被附加,那么SQL Server将不会重新附加。
  
使用附加本地数据文件夹中的数据库文件的方式连接到本地SQL Server Express实例
   
Server=./SQLExpress;AttachDbFilename=|DataDirectory|mydbfile.mdf; Database=dbname;Trusted_Connection=Yes;
 
为何要使用Database参数?如果同名的数据库已经被附加,那么SQL Server将不会重新附加。
  
使用在SQL Server Express实例上的用户实例
Data Source=./SQLExpress;Integrated Security=true;AttachDbFilename=|DataDirectory|/mydb.mdf;User Instance=true;
 
数据库镜像
Data Source=myServerAddress;Failover Partner=myMirrorServer;Initial Catalog=myDataBase;Integrated Security=True;
 
Asynchronous processing
Server=myServerAddress;Database=myDataBase;Integrated Security=True;Asynchronous Processing=True;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值