CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

求救,初学,在VC中,API通过ODBC操作数据库

楼主wangyinet(卢佳宜)2006-07-01 15:58:48 在 VC/MFC / 基础类 提问

程序运行结果  
  Connect   Success!  
  SQLExecDirect   failed!   //这里说明执行SQL语句失败  
  Hello   API   ODBC!  
   
  代码如下:  
  #include   <conio.h>  
  #include   <stdio.h>  
  #include   <afxwin.h>  
  #include   <sqlext.h>    
  #include   <sql.h>    
  #pragma   comment(lib,   "odbc32.lib")  
   
  int   main(int   argc,   char*   argv[])  
  {  
  SQLRETURN   sr;  
   
  SQLHENV     hEnv;   //分配odbc环境  
   
  SQLHDBC     hDbc;//  
   
  SQLHSTMT   hStmt;//  
   
  //  
     
  SQLCHAR       SqlState[6];    
  SQLINTEGER   NativeError;    
  SQLCHAR   ErrMsg[SQL_MAX_MESSAGE_LENGTH];    
   
  SQLCHAR   szName[50];  
  SQLINTEGER   cbName;  
         
  //  
  int   i   =   1;    
  char   szDSN[]   =   "TestDB";//ODBC数据源    
  char   szUID[]   =   "sa";   //SQL用户  
  char   szAuthStr[]   =   "";   //口令  
   
   
  LPCSTR   svSQL="select   szName   from   [ApiOdbc]";  
   
   
  sr   =   SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&hEnv);//创建ODBC句柄,分配odbc环境  
                    sr   =   SQLSetEnvAttr(hEnv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)   SQL_OV_ODBC3,SQL_IS_INTEGER);   //设定odbc版本  
                    sr   =   SQLSetConnectAttr(hDbc,SQL_ATTR_LOGIN_TIMEOUT,(void*)5,0);   //分配odbc连接句柄    
  //连接    
  sr   =   SQLConnect(hDbc,(SQLCHAR   *)szDSN,   SQL_NTS,(SQLCHAR   *)szUID,SQL_NTS,(SQLCHAR   *)NULL,SQL_NTS);    
           
   
  /*如果返回值为SQL_ERROR或SQL_SUCCESS_WITH_INFO,可以用函数SQLGetDiagRec获取相应SQLSTATE的值*/  
  if(sr   !=   SQL_SUCCESS   &&   sr   !=   SQL_SUCCESS_WITH_INFO)    
  {  
  TRACE("ERROR");    
  while(SQLGetDiagRec(SQL_HANDLE_DBC,hDbc,i,SqlState,   &NativeError,ErrMsg,sizeof(ErrMsg),NULL)!=   SQL_NO_DATA)  
  TRACE("Diag   :   %d   SQLSTATE   :%s   NativeError   :   %d   ,ErrMsg   :   %s\n",i   ++,SqlState,NativeError,ErrMsg);    
  }    
  else  
  printf("Connect   Success!\n");  
   
  //sr   =   SQLAllocStmt(hDbc,&hStmt);SQLAllocStmt()   已被废弃,且替换为   SQLAllocHandle();  
           
  //直接执行SQL语句  
  sr=SQLExecDirect(hStmt,(SQLCHAR   *)svSQL,strlen(svSQL)   );//对于SQL查询语句,ODBC会返回一个光标,与光标对应的是一个结果集合(可以理解为一个表格)  
  if   (   (sr   !=   SQL_SUCCESS)   &&   (sr   !=   SQL_SUCCESS_WITH_INFO)   )    
          {  
                    printf("SQLExecDirect   failed!\n");  
  }  
  else  
  {  
  while   ((sr=SQLFetch(hStmt))!=SQL_NO_DATA)  
  {  
  //执行SQL语句后遍历结果集来得到数据  
  SQLGetData(hStmt,   2,   SQL_C_CHAR,   szName,   50,   &cbName);  
  printf("%s\n",szName);  
  }  
  }  
   
          //断开数据库连接  
  sr   =   SQLDisconnect(hDbc);    
  if(hDbc   !=   SQL_NULL_HANDLE)    
  SQLFreeHandle(SQL_HANDLE_DBC,hDbc);    
  if(hDbc   !=   SQL_NULL_HANDLE)    
  SQLFreeHandle(SQL_HANDLE_ENV,hEnv);  
  if(hStmt!=NULL)  
  SQLFreeStmt(   hStmt,   SQL_DROP   );      
   
  printf("Hello   API   ODBC!\n");  
  getch();  
  return   0;  
  }  
   
   
   
   
  问题点数:20、回复次数:4Top

1 楼wangyinet(卢佳宜)回复于 2006-07-01 15:59:52 得分 0

sr=SQLExecDirect(hStmt,(SQLCHAR   *)svSQL,strlen(svSQL)   );//对于SQL查询语句,  
  这句没能通过Top

2 楼wangyinet(卢佳宜)回复于 2006-07-01 16:00:50 得分 0

解决问题者加100分,拼老本了Top

3 楼wangyinet(卢佳宜)回复于 2006-07-01 16:41:15 得分 0

刚发现连接数据库是失败的  
   
  有没人帮下我啊Top

4 楼seu07201213(【_】〖汪洋中的一片叶子〗≈^︵^≈)回复于 2006-07-01 18:14:05 得分 20

你的问题已经在你发的另一贴中解决;  
  http://community.csdn.net/Expert/topic/4854/4854690.xml?temp=.9844629Top

相关问题

关键词

得分解答快速导航

  • 帖主:wangyinet
  • seu07201213

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo