数据库是mysql
想通过sql语句“lock table test write”编程实现锁表,运行程序后,在mysql控制台测试,发现并没有锁表,仍然能够update,不知是什么缘故,求高手指点~源码如下:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <CString>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <odbcss.h>
using namespace std;SQLHENV henv = 0;
SQLHDBC hdbc = 0;
SQLHSTMT hstmt = 0; int main()
{
RETCODE retcode; //signed short
SQLCHAR szKey[20]; //unsigned char
SQLINTEGER cbKey;//long
char szDSN[10] = "test_db"; //一个合法的DSN Name
char szUID[5] = "root"; //用户名
char szAuthStr[5] = "root"; //用户密码
retcode = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);//申请环境句柄
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);//将ODBC设置成为版本3,否则某些ODBC API 函数不能被支持
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); //申请数据库连接句柄 //连接
retcode = SQLConnect(hdbc, (SQLCHAR *)szDSN, (SWORD)strlen(szDSN),
(SQLCHAR *)szUID, (SWORD)strlen(szUID),
(SQLCHAR *)szAuthStr,(SWORD)strlen(szAuthStr)); if((retcode != SQL_SUCCESS)&&(retcode != SQL_SUCCESS_WITH_INFO))
printf("Connection Error\n");
else
printf("Connection Successfully\n");
SQLTCHAR sql[60]="lock table test write"; retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//申请SQL语句句柄
retcode = SQLExecDirect(hstmt,sql,SQL_NTS);//执行Sql语句 if (retcode==SQL_SUCCESS)
{
cout<<"lock table success"<<endl;
}
else
cout<<"SQL_ERROR"<<endl;
SQLFreeHandle(SQL_HANDLE_STMT,hstmt);//释放资源
SQLDisconnect(hdbc);//关闭连接
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv); getchar();
return 0;
}
想通过sql语句“lock table test write”编程实现锁表,运行程序后,在mysql控制台测试,发现并没有锁表,仍然能够update,不知是什么缘故,求高手指点~源码如下:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <CString>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <odbcss.h>
using namespace std;SQLHENV henv = 0;
SQLHDBC hdbc = 0;
SQLHSTMT hstmt = 0; int main()
{
RETCODE retcode; //signed short
SQLCHAR szKey[20]; //unsigned char
SQLINTEGER cbKey;//long
char szDSN[10] = "test_db"; //一个合法的DSN Name
char szUID[5] = "root"; //用户名
char szAuthStr[5] = "root"; //用户密码
retcode = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);//申请环境句柄
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);//将ODBC设置成为版本3,否则某些ODBC API 函数不能被支持
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); //申请数据库连接句柄 //连接
retcode = SQLConnect(hdbc, (SQLCHAR *)szDSN, (SWORD)strlen(szDSN),
(SQLCHAR *)szUID, (SWORD)strlen(szUID),
(SQLCHAR *)szAuthStr,(SWORD)strlen(szAuthStr)); if((retcode != SQL_SUCCESS)&&(retcode != SQL_SUCCESS_WITH_INFO))
printf("Connection Error\n");
else
printf("Connection Successfully\n");
SQLTCHAR sql[60]="lock table test write"; retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//申请SQL语句句柄
retcode = SQLExecDirect(hstmt,sql,SQL_NTS);//执行Sql语句 if (retcode==SQL_SUCCESS)
{
cout<<"lock table success"<<endl;
}
else
cout<<"SQL_ERROR"<<endl;
SQLFreeHandle(SQL_HANDLE_STMT,hstmt);//释放资源
SQLDisconnect(hdbc);//关闭连接
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv); getchar();
return 0;
}
不知道这么做对不?我刚接触mysql,不知道应该怎么测试啊?谢谢喽~