我利用ODBC连入数据库,函数大致是这样的
void UserInsert(HWND hwnd,LPCSTR lpcstr)
{
SQLHENV henv = NULL;
SQLHDBC hdbc = NULL;
SQLHSTMT hstmt = NULL;
SQLRETURN result;
SQLCHAR ConnStrIn[MAXBUFLEN] = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;UID=root;PWD=;DATABASE=test;CharSet=gbk;";
SQLCHAR ConnStrOut[MAXBUFLEN];
result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (void*)LOGIN_TIMEOUT, 0);
result = SQLDriverConnect(hdbc,NULL,
ConnStrIn,SQL_NTS,
ConnStrOut,MAXBUFLEN,
(SQLSMALLINT *)0,SQL_DRIVER_NOPROMPT);
if(SQL_ERROR==result)
{
ShowUserConnError(hwnd,hdbc);
return;
}
result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
result = SQLPrepare(hstmt,(SQLCHAR*)lpcstr,SQL_NTS);
CHECKUserSTMTERROR(hwnd,result,hstmt);
result =SQLExecute(hstmt);
CHECKUserSTMTERROR(hwnd,result,hstmt);
SQLFreeStmt(hstmt,SQL_CLOSE);
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
SQLFreeHandle(SQL_HANDLE_ENV,henv);
}我想到两种方法,一种是UDP通过SOCKET直接发送SQL语句,第二种是直接将SEVER=127.0.0.1改为服务器IP(局域网)
问第二种方法能不能实现,如果能那哪种方法更好?
如果是第一种方法 我用50台机器同时发送数据会不会丢包,每台机器都是间隔1-2S左右。
如果是第二种方法 会不会报MAX_CONNECTION错?MAX_CONNECTION怎么算的,按上面那样写,每执行一次就是1个CONNECTION还是只要不超过某个时间1台机器就是1个连接?
void UserInsert(HWND hwnd,LPCSTR lpcstr)
{
SQLHENV henv = NULL;
SQLHDBC hdbc = NULL;
SQLHSTMT hstmt = NULL;
SQLRETURN result;
SQLCHAR ConnStrIn[MAXBUFLEN] = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;UID=root;PWD=;DATABASE=test;CharSet=gbk;";
SQLCHAR ConnStrOut[MAXBUFLEN];
result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (void*)LOGIN_TIMEOUT, 0);
result = SQLDriverConnect(hdbc,NULL,
ConnStrIn,SQL_NTS,
ConnStrOut,MAXBUFLEN,
(SQLSMALLINT *)0,SQL_DRIVER_NOPROMPT);
if(SQL_ERROR==result)
{
ShowUserConnError(hwnd,hdbc);
return;
}
result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
result = SQLPrepare(hstmt,(SQLCHAR*)lpcstr,SQL_NTS);
CHECKUserSTMTERROR(hwnd,result,hstmt);
result =SQLExecute(hstmt);
CHECKUserSTMTERROR(hwnd,result,hstmt);
SQLFreeStmt(hstmt,SQL_CLOSE);
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
SQLFreeHandle(SQL_HANDLE_ENV,henv);
}我想到两种方法,一种是UDP通过SOCKET直接发送SQL语句,第二种是直接将SEVER=127.0.0.1改为服务器IP(局域网)
问第二种方法能不能实现,如果能那哪种方法更好?
如果是第一种方法 我用50台机器同时发送数据会不会丢包,每台机器都是间隔1-2S左右。
如果是第二种方法 会不会报MAX_CONNECTION错?MAX_CONNECTION怎么算的,按上面那样写,每执行一次就是1个CONNECTION还是只要不超过某个时间1台机器就是1个连接?
解决方案 »
- mysql获取数据,报“值对于Int32太大或太小”错误
- mysql c-api 连接超时无效
- 数据插入乱码问题
- mysql数据库表中信息统计
- 逗号相隔字段值查询的最优方法是什么呢?
- 简单 --- mysql 字符问题
- 更新记录,急,请帮帮忙忙,谢谢
- Linux下安装Mysql后,用windows2000连接不上,why?急急急急急急急急急急急急急急急急急急急急急急!
- ▄◣如何实现sqlserver和mysql两个数据库之间的数据同步,最好请大斑竹来回答,急,200分在线等...?◤up也有分!◥
- Mysql 查询语句怎么写?
- 求助,从unix 连接windows上的mysql
- 同一个表里的同一个记录的一个字段的值给另一个字段
设置 max_connections = 100 就行,100也是默认设置。这样你同时100连接也没有问题。