Home C/C++ MSSQL_Connector
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <conio.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <odbcss.h>

#define MAXBUFLEN 255

SQLHENV henv = SQL_NULL_HENV;
SQLHDBC hdbc = SQL_NULL_HDBC;
SQLHSTMT hstmt = SQL_NULL_HSTMT;

int Connect_SQLServer()
{
    RETCODE retcode;
 
    SQLCHAR ConnStrIn[MAXBUFLEN]="DRIVER={SQL Server};SERVER=127.0.0.1;UID=wayne;PWD=305859616;DATABASE=master;";
    //1.连接数据源
    //1.环境句柄
    retcode=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE ,&henv);
    retcode=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);
    //2.连接句柄
    retcode=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
    retcode=SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,NULL,NULL,NULL,SQL_DRIVER_NOPROMPT);
    //判断连接是否成功
    if((retcode!=SQL_SUCCESS)&&(retcode!=SQL_SUCCESS_WITH_INFO))
        return 0;
 return 1;
}

int ChangeDB(char *DBN)
{
 RETCODE retcode;
 SQLHSTMT  hstmt;
 char SQL_CMD[100];
 
 memset(SQL_CMD,NULL,sizeof(SQL_CMD));
    sprintf(SQL_CMD,"use %s;",DBN);
 retcode= SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
 if(retcode!=SQL_SUCCESS && retcode!=SQL_SUCCESS_WITH_INFO)
  return 0;
 SQLFreeStmt(hstmt,SQL_CLOSE);
 retcode=SQLExecDirect(hstmt,(unsigned char *)SQL_CMD,SQL_NTS);
 if(retcode!=SQL_SUCCESS && retcode!=SQL_SUCCESS_WITH_INFO)
  return 0;
 
 return 1;
}

int QueryDB(SQLHSTMT *hstmt,char *SQL_CMD)
{
 RETCODE retcode;
 

 retcode= SQLAllocHandle(SQL_HANDLE_STMT, hdbc, hstmt);
 if(retcode!=SQL_SUCCESS && retcode!=SQL_SUCCESS_WITH_INFO)
  return 0;
 SQLFreeStmt(*hstmt,SQL_CLOSE);
 retcode=SQLExecDirect(*hstmt,(unsigned char *)SQL_CMD,SQL_NTS);
 if(retcode!=SQL_SUCCESS && retcode!=SQL_SUCCESS_WITH_INFO)
  return 0;
 
 return 1;
}

int show_results(SQLHSTMT hstmt)
{
 RETCODE retcode;
 SQLINTEGER RowCount;
 char data[100];
    SQLCHAR   buff[50];
    SQLINTEGER  len;
 int flag=0;

    retcode=SQLRowCount(hstmt,&RowCount);
 if(retcode!=SQL_SUCCESS && retcode!=SQL_SUCCESS_WITH_INFO)
  return 0;

 while(1)
 {
  memset(data, 0, sizeof(data));
  retcode = SQLFetch(hstmt);
  if (retcode==SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  {
   memset(buff,NULL,sizeof(buff));
   SQLGetData(hstmt,(UWORD)2,SQL_C_CHAR,buff,sizeof(buff)-1, &len);  //第二个参数表示列

//    if(!strncmp((char *)buff,"3",1) || !strncmp((char *)buff,"2",1) \
//     || !strncmp((char *)buff,"1",1))
//     flag=1;
//    else
//     flag=0;
   strcat(data,(char *)buff);

   strcat(data, "\t");
   memset(buff,NULL,sizeof(buff));
   SQLGetData(hstmt,(UWORD)3,SQL_C_CHAR,buff,sizeof(buff)-1,&len);
   strcat(data,(char *)buff);

   strcat(data, "\t");
   memset(buff,NULL,sizeof(buff));
   SQLGetData(hstmt,(UWORD)4,SQL_C_CHAR,buff,sizeof(buff)-1,&len);
//    if(!strcmp((char *)buff,"17") && flag==1)
//     flag=1;
//    else
//     flag=0;
   strcat(data,(char *)buff);

   strcat(data, "\t");
   memset(buff,NULL,sizeof(buff));
   SQLGetData(hstmt,(UWORD)5,SQL_C_CHAR,buff,sizeof(buff)-1,&len);
   if(!strcmp((char *)buff,"0"))
       strcat(data,"男");
   else
    strcat(data,"女");

   strcat(data, "\t");
   memset(buff,NULL,sizeof(buff));
   SQLGetData(hstmt,(UWORD)7,SQL_C_CHAR,buff,sizeof(buff)-1,&len);
   strcat(data,(char *)buff);
  }
  else
   return 1;
//  if(flag)
      printf("%s\n",data);
 }
}

int main()
{
    SQLHSTMT hstmt;
    char buff[100];
    char query[100];
 char choose[10];
 int tmp;
    int i,j;
 
    system("color a");
    if(!Connect_SQLServer())
    {
        printf("数据库连接失败\n");
        getch();
        return -1;
    }
    printf("数据库连接成功\n");
 printf("请输入检索方式:\n1.QQ号\t2.姓名\t3.群号\n");
 fflush(stdin);
 if(scanf("%d",&tmp)!=1) return -1;
 memset(choose,NULL,sizeof(choose));
 switch (tmp)
 {
 case 1:
  strcat(choose,"QQNum");
  break;
 case 2:
  strcat(choose,"Nick");
  break;
 case 3:
  strcat(choose,"QunNum");
  break;
 default:
  return -1;
 }

 
    printf("请输入要查询的内容:");
    memset(query,NULL,sizeof(query));
    fflush(stdin);
    gets(query);
 
 printf("QQNum\t\tName\tAge\tSex\tQunNum\n");
    for(i=1,j=1; i<=11; i++)
    {
  //printf("正在查询第%d个数据库。\n",i);
        memset(buff,NULL,sizeof(buff));
        sprintf(buff,"GroupData%d",i);
        if(!ChangeDB(buff))
            break;
        for(;; j++)
        {
   //printf("正在查询第%d个表。\n",j);
   memset(buff,NULL,sizeof(buff));
   sprintf(buff,"select * from Group%d where %s like '%%%s%%';",j,choose,query);
            if(!QueryDB(&hstmt,buff))
    break;
   
            show_results(hstmt);
        }
    }
 printf("查询完成。\n");
 system("pause");
 
    return 0;
}

打赏
0 comment

You may also like

Leave a Comment

*

code

error: Alert: Content is protected !!