⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sasql.c.bak

📁 cygwin环境编译,saac登陆服务端,石器2最新代码
💻 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 + -