📄 sasql.c.bak
字号:
#define _SASQL_C_#include "version.h"#ifdef _SASQL//新添加#include "main.h"#include <windows.h>#include <w32api/sql.h>#include <w32api/sqlext.h>HENV henv = SQL_NULL_HENV;HDBC hdbc = SQL_NULL_HDBC;HSTMT hstmt = SQL_NULL_HSTMT;RETCODE rc; SQLCHAR sid[16]; SQLCHAR sps[16]; SQLINTEGER err;typedef struct tagConfig{ char SQL_DSN[16]; char SQL_USER[16]; char SQL_PASSWORD[16]; char SQL_INFOTABLE[16]; char SQL_LOCK[16]; char SQL_RegTime[16]; char SQL_LoginTime[16]; char SQL_OnlineName[16]; }Config;Config config;int AUTOREG;int USEMSSQL;void check_return (RETCODE rc,HENV henv,HDBC hdbc,HSTMT hstmt );static int readConfig( char *path ){ char buf[255]; FILE *fp; fp = fopen( path , "r" ); if( fp == NULL ){ return -2; } while( fgets( buf , sizeof( buf ) , fp )){ char command[255]; char param[255]; chop(buf); easyGetTokenFromString( buf , 1 , command , sizeof( command )); easyGetTokenFromString( buf , 2 , param , sizeof( param )); if( strcmp( command , "USEMSSQL" ) == 0 ){ USEMSSQL = atoi( param ); if(USEMSSQL==0)break; } if( strcmp( command , "SQL_DSN" ) == 0 ){ snprintf( config.SQL_DSN , sizeof( config.SQL_DSN) , param) ; log("数据库 DSN:%s\n",config.SQL_DSN); } else if( strcmp( command , "SQL_USER" ) == 0 ){ snprintf( config.SQL_USER , sizeof( config.SQL_USER) , param) ; log("登陆数据库账号名:%s\n",config.SQL_USER); } else if( strcmp( command , "SQL_PASSWORD" ) == 0 ){ snprintf( config.SQL_PASSWORD , sizeof( config.SQL_PASSWORD) , param) ; log("登陆数据库密码:%s\n",config.SQL_PASSWORD); } else if( strcmp( command , "SQL_INFOTABLE" ) == 0 ){ snprintf( config.SQL_INFOTABLE , sizeof( config.SQL_INFOTABLE) , param) ; log("人物信息表:%s\n",config.SQL_INFOTABLE); } else if( strcmp( command , "SQL_LOCK" ) == 0 ){ snprintf( config.SQL_LOCK , sizeof( config.SQL_LOCK) , param) ; log("锁定账号表:%s\n",config.SQL_LOCK); } else if( strcmp( command , "SQL_REGTIME" ) == 0 ){ snprintf( config.SQL_RegTime , sizeof( config.SQL_RegTime) , param) ; log("注册时间:%s\n",config.SQL_RegTime); } else if( strcmp( command , "AUTOREG" ) == 0 ){ AUTOREG = atoi( param ); if(AUTOREG){ log("开放自动注册:YES\n"); }else{ log("开放自动注册:NO\n"); } } } fclose(fp); return 0;}BOOL sasql_init( void ){ readConfig("acserv.cf"); if(USEMSSQL==0)return TRUE; char buf[257]; char ODBC[257]; short buflen;// printf ("Initialize the environment structure.\n"); SQLAllocEnv (&henv); // printf ("Initialize the connection structure.\n"); SQLAllocConnect (henv,&hdbc); printf("连接ODBC驱动器..."); sprintf(ODBC,"DSN=%s;UID=sa;PWD=123456;",config.SQL_DSN,config.SQL_USER,config.SQL_PASSWORD); rc = SQLDriverConnect(hdbc,0,ODBC,SQL_NTS,(UCHAR*) buf,sizeof (buf),&buflen,SQL_DRIVER_COMPLETE); check_return (rc,henv,hdbc,hstmt); printf ("成功\n"); SQLAllocStmt (hdbc,&hstmt); SQLBindCol(hstmt, 1, SQL_C_CHAR,&sid,16, &err); SQLBindCol(hstmt, 2, SQL_C_CHAR,&sps,16, &err);}void sasql_close( void ){ if(USEMSSQL==0)return;// printf ("Free the statement handle.\n"); SQLFreeStmt (hstmt,SQL_DROP); // printf ("Disconnect from the data source.\n"); SQLDisconnect (hdbc); // printf ("Free the connection structure.\n"); SQLFreeConnect (hdbc); // printf ("Free the environment structure.\n"); SQLFreeEnv (henv);}int sasql_query(char *id, char *ps){ if(USEMSSQL==0)return TRUE; SQLCHAR sqlstr[128]; SQLCHAR szPass[64]={0}; SQLINTEGER cbPass; SQLCancel(hstmt); sprintf(sqlstr,"select * from %s where ID='%s'",config.SQL_INFOTABLE,id); rc = SQLExecDirect( hstmt, sqlstr, SQL_NTS); check_return (rc,henv,hdbc,hstmt); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { while( SQL_SUCCESS == SQLFetch(hstmt) ){ if(SQLGetData(hstmt, 2, SQL_C_CHAR, szPass, 50, &cbPass) == SQL_SUCCESS) if(strcmp(szPass,ps)==0){ return 1; }else{ printf("账号%s密码错误!\n",id); return 2; } } printf("账号%s未注册!\n",id); return 3; } return 0;}BOOL sasql_register(char *id, char *ps){ if(AUTOREG){ SQLCHAR sqlstr[128]; SQLCancel(hstmt); sprintf(sqlstr,"select * from %s where ID='%s'",config.SQL_INFOTABLE,id); rc = SQLExecDirect( hstmt, sqlstr, SQL_NTS); check_return (rc,henv,hdbc,hstmt); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { while( SQL_SUCCESS == SQLFetch(hstmt) ) return FALSE; SQLCancel(hstmt); sprintf(sqlstr,"INSERT INTO %s (ID,PassWord,RegTime,Path) VALUES ('%s','%s',NOW(),'char/0x%x')",config.SQL_INFOTABLE, id, ps, getHash(id) & 0xff); rc = SQLExecDirect( hstmt, sqlstr, SQL_NTS); check_return (rc,henv,hdbc,hstmt); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO){ printf("新账号%s注册成功!\n",id); return TRUE; } } } return FALSE;}void check_return (RETCODE rc,HENV henv,HDBC hdbc,HSTMT hstmt ){ UCHAR state_str [SQL_MAX_MESSAGE_LENGTH]; SDWORD native_error; UCHAR error_msg [SQL_MAX_MESSAGE_LENGTH]; SWORD error_msg_avail = SQL_MAX_MESSAGE_LENGTH - 1; SWORD error_msg_len; RETCODE local_rc; if (rc != SQL_ERROR && rc != SQL_SUCCESS_WITH_INFO ) { return; } local_rc = SQLError(henv,hdbc,hstmt,state_str,&native_error,error_msg,error_msg_avail,&error_msg_len); if (local_rc != SQL_SUCCESS && rc !=SQL_SUCCESS_WITH_INFO) { fprintf(stderr,"Uninterpretable error; exiting \n"); exit (EXIT_FAILURE); } if (rc == SQL_SUCCESS_WITH_INFO) { fprintf(stderr,"Fatal Error %s: %s\n", state_str,error_msg); return; } fprintf(stderr,"Fatal Error %s: %s\n",state_str,error_msg); exit (EXIT_FAILURE);}BOOL sasql_craete_lock( void ){ char sqlstr[128]; SQLCancel(hstmt); sprintf(sqlstr,"create table %s (Name varchar(16),PRIMARY KEY (Name));",config.SQL_LOCK); rc = SQLExecDirect( hstmt, sqlstr, SQL_NTS); check_return (rc,henv,hdbc,hstmt); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { printf("锁定用户表建立成功!\n"); return TRUE; } printf("锁定用户表建立失败!\n"); return FALSE;}BOOL sasql_craete_userinfo( void ){ char sqlstr[255]; SQLCancel(hstmt); sprintf(sqlstr,"CREATE TABLE %s (" "ID varchar(16) NOT NULL," "PassWord varchar(16) NOT NULL," "IP varchar(16)," "RegTime datetime," "LoginTime datetime," "OnlineName varchar(32)," "Online int," "Path varchar(10)," "PRIMARY KEY (ID));",config.SQL_INFOTABLE); rc = SQLExecDirect( hstmt, sqlstr, SQL_NTS); check_return (rc,henv,hdbc,hstmt); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { printf("用户信息表建立成功!\n"); return TRUE; } printf("用户信息表建立失败!\n"); return FALSE;}BOOL sasql_chehk_lock( char *idip ){ char sqlstr[128]; SQLCancel(hstmt); sprintf(sqlstr,"select * from %s where Name='%s'", config.SQL_LOCK, idip); rc = SQLExecDirect( hstmt, sqlstr, SQL_NTS); check_return (rc,henv,hdbc,hstmt); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { while( SQL_SUCCESS == SQLFetch(hstmt) ) return TRUE; } return FALSE;}BOOL sasql_add_lock( char *idip ){ char sqlstr[128]; SQLCancel(hstmt); sprintf(sqlstr,"INSERT INTO %s (Name) VALUES ('%s')", config.SQL_LOCK, idip); rc = SQLExecDirect( hstmt, sqlstr, SQL_NTS); check_return (rc,henv,hdbc,hstmt); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { return TRUE; } return FALSE;}BOOL sasql_del_lock( char *idip ){ char sqlstr[128]; SQLCancel(hstmt); sprintf(sqlstr,"delete from config.SQL_LOCK where Name='%s'", config.SQL_LOCK, idip); rc = SQLExecDirect( hstmt, sqlstr, SQL_NTS); check_return (rc,henv,hdbc,hstmt); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { return TRUE; } return FALSE;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -