#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;
}