ADO连接SQL Server数据库

来源:互联网 发布:淘宝砍价师怎么砍价的 编辑:程序博客网 时间:2024/04/29 02:10

转载至:http://blog.csdn.net/zhangkaihang/article/details/7502426

这篇文章不是介绍ADO连接数据库的原理的,而是写一下连接的步骤和简便方法。

一、获取连接字符串。

连接数据库时需要用到  _ConnectionPtr  对象的open方法,参数如下:

HRESULT Connection15::Open(_bstr_t  ConnectionString,  _bstr_t   UserID,  _bstr_t   Password,  _bstr_t   Options)

在写这个ConnectionString连接字符串时,有的人感觉很困难,下面是一种简单的方法来获得这个连接字符串。

1.1 新建一个.udl的文件,打开,在提供的程序选项中选择Microsoft OLE DB Provider for SQL Server 然后下一步。如下图:


1.2 在连接中填写必要的信息后,点击测试连接,如果成功会出现如下图所示的提示框。


其中的服务器名称就是你SQL Server服务器的名称,如果不知道,可以在SQL Server中的服务器属性中看到,如下图:


二、下面贴出控制台程序,说明连接过程。

编译环境:Visual Studio 2010 旗舰版
注意点:
1、如果发现执行后结果中有显示乱码现象,请将工程属性中的字符集项设置为:使用多字节字符集或未设置。
2、注意程序中的连接字符串是适合我电脑数据库的,你要是测试的需修改为你自己(可以按照上面的方法来获得连接字符串)
[cpp] view plaincopy
  1. //导入一个ADO动态链接库msado15.dll  
  2. #import "C:\Program Files\Common Files\System\ADO\\msado15.dll"  
  3. #include <stdio.h>  
  4.   
  5. inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};  
  6.   
  7. void ConnectionStringX(_ConnectionPtr pConnection);         //连接数据库  
  8. _bstr_t GetState(int intState);     //得到连接状态  
  9. void PrintProviderError(_ConnectionPtr pConnection); //输出错误  
  10. void PrintComError(_com_error &e);                  //输出错误  
  11. void ExitConnect(_ConnectionPtr pConnection);       //关闭连接  
  12. void main()  
  13. {  
  14.     // 初始化OLE/COM库环境   
  15.     if(FAILED(::CoInitialize(NULL)))  
  16.     {  
  17.         return;  
  18.     }  
  19.     //创建连接对象  
  20.      _ConnectionPtr pConnection = NULL;  
  21.   
  22.     ConnectionStringX(pConnection);  
  23.   
  24.     ExitConnect(pConnection);  
  25.     // 释放环境  
  26.     ::CoUninitialize();  
  27. }  
  28.   
  29. void ConnectionStringX(_ConnectionPtr pConnection)  
  30. {  
  31.     HRESULT  hr = S_OK;  
  32.     try  
  33.     {  
  34.         //ADO方式连接数据库  
  35.         TESTHR(pConnection.CreateInstance( __uuidof(Connection)));  
  36.         pConnection->ConnectionString =  "Provider='SQLOLEDB';Data Source='SD-20120421UVIT\\SQLEXPRESS';"  
  37.     "Initial Catalog='master';Integrated Security='SSPI';";  
  38.         pConnection->ConnectionTimeout = 10;  
  39.         pConnection->Open("","","",adConnectUnspecified);  
  40.         printf("Connection1 state: %s\n",(LPCSTR)GetState(pConnection->State));   
  41.     }  
  42.     catch(_com_error &e)  
  43.     {  
  44.         //打印错误  
  45.         PrintProviderError(pConnection);  
  46.         PrintComError(e);  
  47.     }  
  48.   
  49. }  
  50.   
  51. //得到连接状态  
  52. _bstr_t GetState(int intState)   
  53. {  
  54.     _bstr_t strState;   
  55.     switch(intState)   
  56.     {  
  57.         case adStateClosed:  
  58.             strState = "adStateClosed";  
  59.             break;  
  60.         case adStateOpen:  
  61.             strState = "adStateOpen";  
  62.             break;  
  63.         default:  
  64.         ;  
  65.     }  
  66.     return strState;  
  67. }  
  68.   
  69. //打印连接过程中的错误消息  
  70. void PrintProviderError(_ConnectionPtr pConnection)  
  71. {  
  72.     // 打印连接对象的发生的错误  
  73.     ErrorPtr  pErr = NULL;  
  74.   
  75.     if( (pConnection->Errors->Count) > 0)  
  76.     {  
  77.         long nCount = pConnection->Errors->Count;  
  78.   
  79.         for(long i = 0; i < nCount; i++)  
  80.         {  
  81.             pErr = pConnection->Errors->GetItem(i);  
  82.             printf("Error number: %x\t%s\n", pErr->Number,(LPCSTR)pErr->Description);  
  83.         }  
  84.     }  
  85. }  
  86.   
  87. //打印COM错误  
  88. void PrintComError(_com_error &e)  
  89. {  
  90.     _bstr_t bstrSource(e.Source());  
  91.     _bstr_t bstrDescription(e.Description());  
  92.   
  93.     printf("Error\n");  
  94.     printf("\tCode = %08lx\n", e.Error());  
  95.     printf("\tCode meaning = %s\n", e.ErrorMessage());  
  96.     printf("\tSource = %s\n", (LPCSTR) bstrSource);  
  97.     printf("\tDescription = %s\n", (LPCSTR)bstrDescription);  
  98. }  
  99.   
  100. //关闭连接  
  101. void ExitConnect(_ConnectionPtr pConnection)      
  102. {  
  103.     if (pConnection)  
  104.         if (pConnection->State == adStateOpen)  
  105.             pConnection->Close();  
  106. }  
结果如下图:
原创粉丝点击