MicroSoft SQL Server Manager 通过ODBC与VS进行连接操作示例程序
2017-09-12 11:01
706 查看
建立数据源的时候,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数据源 } MyODBCA 4000 PI::~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; }
相关文章推荐
- [Microsoft][ODBC SQL Server Driver][SQL Server]无法连接到 XXXXX上的调试程序(错误 = 0x800401f3)。请确保已在
- SQL Server Mobile 学习(二):通过 VS2005 创建和连接及操作 SQL Server Mobile 数据库
- VS环境下 Ibatis .Net 连接sqlserver 2005 碰到的问题 Unable to open connection to "Microsoft SQL Server, provider V2.0.0.0 in framework .NET V2.0".
- [转]VS 2013 连接数据库报错 未能加载文件或程序集 Microsoft.SqlServer.Management.Sdk.Sfc
- Microsoft SQL Server 2008使用Management Studio进行连接到服务器问题
- com.microsoft.sqlserver.jdbc.SQLServerException: 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接
- 「吐槽」使用VS2012 代替SQL Server Manager 进行简单操作
- java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver Eclipse3.1 数据库连接测试程序(SQL Server 2000 Driver for JDBC Service Pack 3 安装测试)
- Qt通过ODBC连接SQL_server_2008
- 已成功与服务器建立连接,但是在登录过程中发生错取。(provider:共享内存提供程序,error:0-管道的另一端上无任何进程。)(Microsoft SQL Server,错误:233)
- 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 -
- [Microsoft][ODBC SQL Server Driver]l连接占线导致另一个hstmt
- provider:命名管道提供程序,error:40 - 无法打开到SQL Server的连接 (Microsoft SQL Server, 错误:53)
- Microsoft OLE DB Provider for SQL Server (0x80040E14) 已拒绝对 OLE DB 提供程序 'Microsoft.Jet.OLEDB.4.0' 的特殊访问。必须通过链接服务器来访问此提供程序。
- 连接到 SQL Server 2008 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败 (Microsoft SQL Server,错误: 10060)
- com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立 安全连接。错误:“SQL
- 建立Sql Server ODBC链接的时候报SQLSTATE=08001 Microsoft SQL Native client 命名管道提供程序:无法打开与SQL Server 的链接[2]
- Python002-操作MSSQL(Microsoft sql server)基础示例(二)
- 启动SQL 2005的SQL Server Configuration Manager时显示无法连接到WMI提供程序
- FILEDSN方式连接数据库出现[Microsoft][ODBC SQL Server Driver]无效的属性/选项标识符错误