ODBC API 程序 例子

来源:互联网 发布:招plc编程工程师 编辑:程序博客网 时间:2024/05/21 20:48

#include<iostream>
#include<windows.h>
#include"mhDbapi.h"
#include"string"
#include <atlbase.h>

using namespace std;

 


int MakeSQLServerODBCDSN(LPCTSTR strDBServer,LPCTSTR strDBName,LPCTSTR strDSN,LPCTSTR strUID)
{
 BOOL   bInstallDriver=TRUE;
 CRegKey   regKey;
 
 LONG lRet=regKey.Open(HKEY_LOCAL_MACHINE,"Software//ODBC//ODBCINST.INI//SQL Server");
 if(lRet!=ERROR_SUCCESS)
 {
  bInstallDriver=FALSE;
 }
 else
 {
  char   szDirverPath[MAX_PATH]="";
  DWORD   dwCount=100;
  lRet=regKey.QueryValue(szDirverPath,"Driver",&dwCount);
  if((lRet!=ERROR_SUCCESS)||(dwCount<1))
  {
   DWORD dwErr=GetLastError();
   bInstallDriver=FALSE;
  }
  regKey.Close();
 }
 if(!bInstallDriver)
 {
  return -1;
 }
 string   strKeyValueName="Software//ODBC//ODBC.INI//";
 strKeyValueName+=strDSN;
 lRet=regKey.Create(HKEY_LOCAL_MACHINE,strKeyValueName.c_str());
 if(lRet!=ERROR_SUCCESS)
 {
  return -2;
 }
 regKey.SetValue(strDBName,"Database");
 regKey.SetValue("SQLSrv32.dll","Driver");
 regKey.SetValue(strDBServer,"Server");
 regKey.SetValue(strUID,"LastUser");
 regKey.m_hKey=HKEY_LOCAL_MACHINE;
 regKey.SetKeyValue("Software//ODBC//ODBC.INI//ODBC Data Sources","SQL Server",strDSN);
 regKey.Close();
 return 0;
}

 

 


int main()
{
/*
  HDBPROC_T *test = new HDBPROC_T;
  
  SQLHENV  henv =NULL;
  SQLHDBC    hDBC=NULL;
  SQLHSTMT   hSTMT=NULL;  
  BYTE       PreNum = 1;
  test->DBType = 0;
  (test->hENV) =henv;
  (test->hDBC) =hDBC;
  (test->hSTMT) =hSTMT;
  test->PreNum = PreNum;
  memset(test->PreStm,0,sizeof(test->PreStm));
  
  long revalinit = HDBInit(test);
  long revalConn  = 0;
  long revalQue = 0;
  if(revalinit == 1)
  {
   revalConn = HDBConnect(test,"LBQ","Test","sa","lbq",FALSE);
   if(1 == revalConn)
   {
    cout<<"Conn Success"<<endl;
    revalQue = TableQuery(test,"select * from student",1,0);
 
   }
   
  }*/
 

 

 


 int i = 0;
 i = MakeSQLServerODBCDSN("127.0.0.1","master","SQL Server","sa");

 

 SQLHENV         henv     =   NULL;   //定义环境句柄
 SQLHSTMT       hstmt   =   NULL;    //定义语句句柄
 SQLHDBC         hdbc     =   NULL;   //定义连接句柄
 SQLRETURN     sqlreturn;  
 
 sqlreturn   =   SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);  
 //     创建odbc环境句柄  
 sqlreturn   =   SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);  
 //     设置odbc版本号  
 sqlreturn   =   SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);  
 //     创建odbc连接句柄  
 sqlreturn   =   SQLConnect(hdbc,   (SQLCHAR  *)"SQL Server",   SQL_NTS,  
  (SQLCHAR  *)"sa",   SQL_NTS,   (SQLCHAR  *)"lbq",   SQL_NTS);  
 //     建立odbc连接  
 sqlreturn   =   SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);  
 //     创建sql语句的语句句柄  
  sqlreturn = SQLExecDirect(hstmt,(SQLCHAR *)"insert into student values('12345',12345,222)",SQL_NTS);
 sqlreturn   =   SQLExecDirect(hstmt, (SQLCHAR   *)"select   name,number   from     student     ",SQL_NTS);  

 //     直接执行  
 short   ColsCount   =   0;  
 sqlreturn   =   SQLNumResultCols(hstmt,&ColsCount);  
 //得到返回结果集的列数  
 long   RowsCount   =   0;  
 sqlreturn   =   SQLRowCount(hstmt,&RowsCount);  
 //得到返回结果集的行数******不是列数******  
 char   szUserName[16];  
 char   szPassWord[13];  
 memset(szUserName,0,16);  
 memset(szPassWord,0,13);  
 //以上是存放绑定数据的变量  
 SQLINTEGER  cb=SQL_NTS;  
 memset(&cb,0,sizeof(SDWORD));  
 sqlreturn   =   SQLBindCol(hstmt,1,SQL_C_CHAR,szUserName,16,&cb);  
 sqlreturn   =   SQLBindCol(hstmt,2,SQL_C_CHAR,szPassWord,13,&cb);  
 sqlreturn   =   SQLFetch(hstmt);  
 while   (sqlreturn   ==   SQL_SUCCESS)  
 {  
  char   *   pDisplay   =   new   char[60];  
  memset(pDisplay,0,60);  
  sprintf(pDisplay,"name =/"%s/" And number = /"%s/"",szUserName,szPassWord);  
  //AfxMessageBox(pDisplay); 
  cout<<pDisplay<<endl;
  delete   pDisplay;  
  sqlreturn   =   SQLFetch(hstmt);  
 }  
 
 SQLFreeHandle(SQL_HANDLE_STMT,   hstmt);  
 SQLDisconnect(hdbc);  
 SQLFreeHandle(SQL_HANDLE_DBC,   hdbc);  
 SQLFreeHandle(SQL_HANDLE_ENV,   henv);

 return 0;
}