MicroSoft SQL Server Manager 通过ODBC与VS进行连接操作示例程序

来源:互联网 发布:仙侠世界大网络下载 编辑:程序博客网 时间:2024/06/08 03:55

建立数据源的时候,ODBC是多少位的VS工程就应该是多少位的,我这里用的是32位的ODBC,因此VS工程也是32位的。

#ifndef __ODBC_H__#define __ODBC_H__#include<windows.h>  #include<stdio.h>  #include<stdlib.h>  #include<string> #include<iostream>  #include "sql.h"  #include "sqltypes.h"  #include "sqlext.h"    class MyODBCAPI{public:    MyODBCAPI();    ~MyODBCAPI();    SQLHENV henv; //环境句柄    SQLHDBC hdbc; //连接句柄    SQLHSTMT hstmt; //语句句柄    SQLRETURN retcode;    BOOL bInit;    BOOL InitODBC();    //连接ODBC数据源    BOOL Connect(char* odbcName, char* userID, char* pass);    BOOL ExecSQL(char* sql);    void QueryCustomer(int iMode,char* Field, char* Target);    void InsertCustomer(char* CustomerID, char* CompanyName);    void DeleteCustomer(char* CustomerID);};#endif
#include<windows.h>  #include<stdio.h>  #include<stdlib.h>  #include<string>  #include<iostream>  #include "sql.h"  #include "sqltypes.h"  #include "sqlext.h"  using namespace std;#include "odbc.h"MyODBCAPI::MyODBCAPI(){    InitODBC();  //初始化ODBC数据源}MyODBCAPI::~MyODBCAPI(){    if (hstmt != NULL)    {        SQLFreeHandle(SQL_HANDLE_STMT, hstmt);    }    if (hdbc != NULL)    {        SQLDisconnect(hdbc);        SQLFreeHandle(SQL_HANDLE_DBC, hdbc);    }    if (henv != NULL)    {        SQLFreeHandle(SQL_HANDLE_ENV, henv);    }}BOOL MyODBCAPI::InitODBC(){    henv = NULL;    hdbc = NULL;    hstmt = NULL;    bInit = false;    //分配环境句柄    retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);    if ((retcode ==  SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO))    {        retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);        if ((retcode ==  SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO))        {            bInit = true;        }    }    return bInit;}BOOL MyODBCAPI::Connect(char* odbcName, char* userID, char* pass){    if (!bInit)    {        cout<<"Inite ODBC API failed"<<endl;        return false;    }    retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);    if ((retcode ==  SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO))    {        SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (void*)10, 0);        retcode = SQLConnect(hdbc, (SQLCHAR*)odbcName, SQL_NTS, (SQLCHAR*)userID, SQL_NTS, (SQLCHAR*)pass, SQL_NTS);        if ((retcode ==  SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO))        {            cout<<"connect db successed!"<<endl;            return true;        }        else        {            cout<<"connect db failed!"<<endl;            return false;        }    }    else    {        cout<<"allocate handle failed!"<<endl;        return false;    }}BOOL MyODBCAPI::ExecSQL(char* sql){    cout<<sql<<endl;    retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);    if ((retcode ==  SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO))    {        retcode = SQLExecDirect(hstmt, (SQLCHAR*)sql, SQL_NTS);        if ((retcode ==  SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO))        {            cout<<"Exec sql statement successed!"<<endl;            return true;        }        else        {            cout<<"Exec sql statement failed!"<<endl;            return false;        }    }    else    {        cout<<"Allocate sql statement handle failed!"<<endl;        return false;    }}void MyODBCAPI::QueryCustomer(int iMode, char* Field, char* Target){     if (!Connect("yyc", "Test123", "Yycwto103"))    {        cout<<"Connect db failed!"<<endl;        return;    }    char sql[100];    if (iMode == 0)//全部查询    {        if (!ExecSQL("SELECT * FROM dbo.Customer"))        {            cout<<"Exec sql statement failed!"<<endl;            return;        }    }    else if (iMode == 1)//匹配查询    {        sprintf(sql,"SELECT * FROM dbo.Customer where %s='%s'",Field,Target);        if (!ExecSQL(sql))        {            cout<<"Exec sql statement failed!"<<endl;            return;        }    }    else    {        return;    }    long cbNameLen = 500;    char* CustomerID[500];    SQLBindCol(hstmt, 1, SQL_C_CHAR,(void*)CustomerID, cbNameLen, &cbNameLen);    char* CompanyName[500];    SQLBindCol(hstmt, 2, SQL_C_CHAR,(void*)CompanyName, cbNameLen, &cbNameLen);    int i = 0;    while (SQLFetch(hstmt) == SQL_SUCCESS && i < 100)    {        i++;        if (retcode == SQL_NO_DATA_FOUND)            break;        printf("[%d]%s, %s\r\n",i,CustomerID,CompanyName);    }}void MyODBCAPI::InsertCustomer(char* CustomerID, char* CompanyName){    if (!Connect("yyc", "Test123", "Yycwto103"))    {        cout<<"Connect db failed!"<<endl;        return;    }    char sql[100];    sprintf(sql,"INSERT INTO Customer VALUES('%s', '%s') SELECT * FROM Customer",CustomerID,CompanyName);    if (!ExecSQL(sql))    {        cout<<"Insert customer info failed!"<<endl;        return;    }    cout<<"Insert customer info successed!"<<endl;    return;}void MyODBCAPI::DeleteCustomer(char* CustomerID){    if (!Connect("yyc", "Test123", "Yycwto103"))    {        cout<<"Connect db failed!"<<endl;        return;    }    char sql[100];    sprintf(sql,"DELETE FROM Customer WHERE CustomerID='%s'",CustomerID);    if (!ExecSQL(sql))    {        cout<<"Delete customer info failed!"<<endl;        return;    }    cout<<"Delete customer info successed!"<<endl;}
#include<windows.h>  #include<stdio.h>  #include<stdlib.h>  #include<string>  #include<iostream> #include <time.h>   using namespace std;  #include "odbc.h"   int main()  {    int i = 10;    char* odbcName = "yyc";   //数据源名称      char* userID = "Test123";  //用户名      char* pass = "Yycwto103";  //密码    time_t t;    MyODBCAPI odbc;    odbc.InitODBC();    bool bRtn = odbc.Connect(odbcName, userID, pass);//连接数据库    odbc.InsertCustomer("hpe","test");//插入一条记录    odbc.DeleteCustomer("hpe");//删除带有某一字段的记录    odbc.QueryCustomer(0,NULL,NULL);//全部打印记录    odbc.QueryCustomer(1,"CompanyName","test");//筛选打印记录    getchar();    return 0;     }  
阅读全文
0 0