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
- MicroSoft SQL Server Manager 通过ODBC与VS进行连接操作示例程序
- 使用ODBC连接Microsoft SQL server数据库
- Python通过ODBC连接SQL server
- Qt 通过ODBC连接SQL Server
- Linux下通过ODBC连接SQL Server
- R通过 ODBC方式连接sql server
- VS2012 通过 ODBC 连接到SQL SERVER
- odbc 与sql server 交互vs
- 【C语言】使用ODBC连接Microsoft SQL server数据库
- C/C++使用ODBC连接Microsoft SQL server数据库
- 【C语言】使用ODBC连接Microsoft SQL server数据库
- 使用ODBC连接SQL Server数据库进行增删查改操作全过程
- PHP中通过ODBC连接SQL Server数据库
- Qt 通过ODBC局域网内连接SQL server 2008
- PHP中通过ODBC连接SQL Server数据库
- 通过JDBC/ODBC方法连接SQL Servers与MyEclipe(SQL)
- [Microsoft][ODBC SQL Server Driver][SQL Server]无法连接到 XXXXX上的调试程序(错误 = 0x800401f3)。请确保已在
- 建立Sql Server ODBC链接的时候报SQLSTATE=08001 Microsoft SQL Native client 命名管道提供程序:无法打开与SQL Server 的链接[2]
- vue经典入门系列
- percona-xtradb-cluster 部署笔记
- Mac安装mysql
- 【Java实践】十二小球天平三次称重问题
- java 开发实战经典 练习题 第12章 第7题 完成系统登录程序 从命令行输入用户名和密码
- MicroSoft SQL Server Manager 通过ODBC与VS进行连接操作示例程序
- C语言实例练习
- ASP.NET Core的身份认证框架IdentityServer4(7)- 使用客户端证书控制API访问
- linux如何设置行号
- 网络流--最小费用最大流MCMF算法
- 24. Swap Nodes in Pairs
- 279. Perfect Squares (完全平方数)
- 10大深度学习架构:计算机视觉优秀从业者必备(附代码实现)
- 关于tensorboard启动问题