亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mysql.cpp

?? 一個mysql API的封裝類。使用mysql數據庫的人
?? CPP
字號:
// MySql.cpp : Defines the initialization routines for the DLL.
//

#include "stdafx.h"
#include "MySql.h"

//一個字段結構
typedef struct _FIELDS
{
	char field_name[DEFAULT_FIELD_SIZE];//字段名
	void * filed_value; //字段值的指針
	unsigned value_len; //字段的長度,只適用于字符串類型
}FIELDS,*PFIELDS;

//一行數據的結構數組
typedef struct _ROWS{
    FIELDS fields[DEFAULT_FIELD];   //字段,根據不同的應用程序可以修改此值
	int cnt;             //多少個字段,指示field中元素的有效個數
}ROWS,*PROWS;


MySql::MySql()
{
	result=NULL;
	memset(m_host,0,32);
	memset(m_name,0,32);
	memset(m_pwd,0,32);
	m_port=0;
	mysql_init(&myData);

	//設置連接超時
	unsigned timeout=5*60;
	mysql_options(&myData, MYSQL_OPT_CONNECT_TIMEOUT, (char *)&timeout);
	
	//啟動再連接
	my_bool reconnect=TRUE;
    mysql_options(&myData, MYSQL_OPT_RECONNECT, (char *)&reconnect);

	//初始化HashTable大小為100
	res.InitHashTable(100);
}
MySql::~MySql()
{
	Close();
}

//連接MySql服務器
BOOL MySql::Connect(char * host,char * name,char *pwd,char * db,unsigned port)
{
	BOOL bRet=TRUE;
	strcpy(m_host,host);
	strcpy(m_name,name);
	strcpy(m_pwd,pwd);
	m_port=port;
	do
	{
		//連接服務器
		if(mysql_real_connect(&myData,host,name,pwd,db,port,NULL,0)==NULL)
		{
			bRet=FALSE;
			break;
		}
		
		//設置連接字符集,默認為gb2312
		if(mysql_set_character_set(&myData, "gb2312"))
		{
			bRet=FALSE;
			//如果設置字符集不成功,則關閉連接
			Close();
			break;
		}
		//設置允許多語句支持
		mysql_set_server_option(&myData, MYSQL_OPTION_MULTI_STATEMENTS_ON);
	}while(0);
	return bRet;
}

//執行非查詢語句
BOOL MySql::ExecuteNoQuery(char ** sqlArray,int count)
{
	BOOL uRet=TRUE;
	//撤消自動提交模式
     mysql_autocommit(&myData, 0); 
	 for(int i=0;i<count;i++)
	 {
		 mysql_query(&myData,sqlArray[i]);
		 //查詢受影響的行數
		 //uRet=uRet+(unsigned)mysql_affected_rows(&myData); 
	 }
	 //如果沒有成功
	 if(mysql_commit(&myData))
	 {
		 //回滾事務
		 mysql_rollback(&myData);
		 uRet=FALSE;
	 }
     //恢復自動提交模式
     mysql_autocommit(&myData, 0); 
	 return uRet;
}
//執行查詢語句
unsigned MySql::ExecuteQuery(char * sql)
{
	unsigned uLine=0,uField=0;
	PROWS rows;
	MYSQL_ROW row;
	MYSQL_FIELD *pField;
    //釋放前一次的結果集
	FreeResult();
	//查詢
    mysql_query(&myData,sql);
    //存儲結果集
    result=mysql_store_result(&myData);
    //如果結果集為空,則返回0
    if(result==NULL)return 0;
    //獲得行數
    uLine=(unsigned)mysql_num_rows(result);
    //獲得字段數
    uField=(unsigned)mysql_num_fields(result);
   
   //填充結果集
   for(int i=0;i<(int)uLine;i++)
   {
	   //為存儲一行數據分配內存
      rows=(PROWS)malloc(sizeof(ROWS));
	  //一行有多少個字段
	  rows->cnt=uField;
	  //獲得一行數據
	  row=mysql_fetch_row(result);
	  for(int j=0;j<(int)uField;j++)
	  {
		 //獲得該列的相關信息
		  pField=mysql_fetch_field_direct(result, j);
		  //列名稱
		  strcpy(rows->fields[j].field_name,pField->name);
		  //列值
		  rows->fields[j].filed_value=row[j];
		  //列寬度
		  rows->fields[j].value_len=pField->max_length;
	  }
	  //將一行數據存儲到HashTable中
	  res.SetAt(i,(void *)rows);
   }
   //返回行數
   return uLine;
}

//釋放查詢的結果集
void MySql::FreeResult()
{
	int len=0;
	PROWS rows=NULL;

	len=res.GetCount();
	//釋放結果集的內存
	for(int i=0;i<len;i++)
	{
		rows=(PROWS)res[i];
		if(rows!=NULL)
		{
			free(rows);
			rows=NULL;
		}
	}
   //清空HashTable
	res.RemoveAll();
	//釋放result
    if(result!=NULL)
	{
	   mysql_free_result(result);
	}
	result=NULL;
}

//執行帶參數的SQL語句函數
BOOL MySql::ExecutePrepare(char * sql)
{
	BOOL bRet=TRUE;
	do
	{
		//初始化句柄
		myStmt=mysql_stmt_init(&myData);
		if (!myStmt)
		{
			bRet=FALSE;
			break;
		}
		//準備SQL
		if (mysql_stmt_prepare(myStmt, sql, strlen(sql)))
		{
			bRet=FALSE;
			break;
		}
	}while(0);
	return bRet;
}
BOOL MySql::BindParam(MYSQL_BIND * bind)
{
	BOOL bRet=TRUE;
	if (mysql_stmt_bind_param(myStmt, bind))
	{
       bRet=FALSE;
	}
	return bRet;

}
unsigned MySql::Execute()
{
	unsigned uRet=0;
	do
	{
		if (mysql_stmt_execute(myStmt))
		{
			uRet=0;
			break;
		}
		//獲得受影響的行數 
		uRet=(unsigned)mysql_stmt_affected_rows(myStmt);
	}while(0);
    return uRet;
}
BOOL MySql::ClosePrepare()
{
	BOOL bRet=TRUE;
	//關閉句柄
	if (mysql_stmt_close(myStmt))
	{
       bRet=FALSE;
	}
	return bRet;
}

//改變用戶
BOOL MySql::ChangeUser(char * name,char *pwd,char *db)
{
	BOOL bRet=TRUE;
	//如果失敗,返回FALSE
	if(mysql_change_user(&myData, name, pwd, db) )
	{
		bRet=FALSE;
	}
	return bRet;
}
//選擇數據庫
BOOL MySql::SelectDB(char * db)
{
	BOOL bRet=TRUE;
	if(mysql_select_db(&myData, db))
	{
		bRet=FALSE;
	}
	return bRet;
}


//關閉
void MySql::Close()
{
   //清空結果集
    FreeResult();
	//關閉連接
	mysql_close(&myData);
}


//獲取查詢的值
int MySql::GetIntValue(int row, char * fd_name)
{
	PROWS rows=NULL;
	int len=0;
	int iRet=0;
	char * tmp=NULL;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];
	//查找列
	for(int i=0;i<rows->cnt;i++)
	{
		if(!strcmp(rows->fields[i].field_name,fd_name))
		{
			//獲得數據的字符串表示
			tmp=(char *)rows->fields[i].filed_value;
			//轉換成數字
			iRet=atoi(tmp);
			break;
		}
	}
	return iRet;
}
int MySql::GetIntValue(int row, int fd_num)
{
    PROWS rows=NULL;
	int len=0,iRet=0;
	char * tmp=NULL;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];

    //獲得數字的字符串表示
	tmp=(char *)rows->fields[fd_num].filed_value;
	//轉換成數字
	iRet=atoi(tmp);
	return iRet;
}

//獲得符點型值
float MySql::GetFloatValue(int row,char * fd_name)
{
	PROWS rows=NULL;
	int len=0;
	char * tmp=NULL;
	float iRet=0.0;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];
	//查找列
	for(int i=0;i<rows->cnt;i++)
	{
		if(!strcmp(rows->fields[i].field_name,fd_name))
		{
			tmp=(char *)rows->fields[i].filed_value;
			iRet=(float)atof(tmp);
			break;
		}
	}
	return iRet;
}
float MySql::GetFloatValue(int row,int fd_num)
{
	PROWS rows=NULL;
	int len=0;
	float iRet=0.0;
	char * tmp=NULL;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];

    tmp=(char *)rows->fields[fd_num].filed_value;
    iRet=(float)atof(tmp);
	return iRet;
}

//獲得高精度符點型值
double MySql::GetDoubleValue(int row,char * fd_name)
{
	PROWS rows=NULL;
	int len=0;
	char * tmp=NULL;
	double iRet=0.0;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];
	//查找列
	for(int i=0;i<rows->cnt;i++)
	{
		if(!strcmp(rows->fields[i].field_name,fd_name))
		{
			tmp=(char *)rows->fields[i].filed_value;
		    iRet=atof(tmp);
			break;
		}
	}
	return iRet;
}
double MySql::GetDoubleValue(int row,int fd_num)
{
	PROWS rows=NULL;
	int len=0;
	char * tmp=NULL;
	double iRet=0.0;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];

	tmp=(char *)rows->fields[fd_num].filed_value;
	iRet=atof(tmp);
	return iRet;
}

//獲得布爾型值
BOOL MySql::GetBoolValue(int row,char * fd_name)
{
   	PROWS rows=NULL;
	int len=0;
	char * tmp=NULL;
	BOOL iRet=0;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];
	//查找列
	for(int i=0;i<rows->cnt;i++)
	{
		if(!strcmp(rows->fields[i].field_name,fd_name))
		{
			tmp=(char *)rows->fields[i].filed_value;
			iRet=(BOOL)atoi(tmp);
			break;
		}
	}
	return iRet;
}
BOOL MySql::GetBoolValue(int row,int fd_num)
{
	PROWS rows=NULL;
	int len=0;
	BOOL iRet=0;
	char * tmp=NULL;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];

	tmp=(char *)rows->fields[fd_num].filed_value;
	iRet=(BOOL)atoi(tmp);
	return iRet;
}

char * MySql::GetStringValue(int row,char * fd_name,unsigned * length)
{
	PROWS rows=NULL;
	int len=0;
	char *p_Tmp=NULL;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];
	//查找列
	for(int i=0;i<rows->cnt;i++)
	{
		if(!strcmp(rows->fields[i].field_name,fd_name))
		{
			*length=(unsigned)(rows->fields[i].value_len);
			p_Tmp=(char *)(rows->fields[i].filed_value);
			break;
		}
	}
	return p_Tmp;
}
char * MySql::GetStringValue(int row,int fd_num, unsigned * length)
{
	PROWS rows=NULL;
	int len=0;
	char * p_Tmp=NULL;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];

	//獲得列長度
	*length=(unsigned)rows->fields[fd_num].value_len;
	//直接返回此列的值
	p_Tmp=(char *)(rows->fields[fd_num].filed_value);
	return p_Tmp;
}

//獲得日期時間型數據
char * MySql::GetDataTimeValue(int row,char * fd_name)
{
	PROWS rows=NULL;
	int len=0;
	char * pTime=NULL;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return NULL;
	rows=(PROWS)res[row];
	//查找列
	for(int i=0;i<rows->cnt;i++)
	{
		if(!strcmp(rows->fields[i].field_name,fd_name))
		{
			pTime=(char *)(rows->fields[i].filed_value);
			break;
		}
	}
	return pTime;
}
char * MySql::GetDataTimeValue(int row, int fd_num)
{
   	PROWS rows=NULL;
	int len=0;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return NULL;
	rows=(PROWS)res[row];

	//直接返回此列的值
	return (char *)(rows->fields[fd_num].filed_value);
}

//獲得二進制數據的緩沖區
int MySql::GetBinaryValue(int row,char * fd_name,char * pBuf)
{
	PROWS rows=NULL;
	int len=0;
	char * p=NULL;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];
	//查找列
	for(int i=0;i<rows->cnt;i++)
	{
		if(!strcmp(rows->fields[i].field_name,fd_name))
		{
		    len=(int)rows->fields[i].value_len;
			if(pBuf==NULL)
				break;
			p=(char *)(rows->fields[i].filed_value);
			memcpy(pBuf,p,len);
			break;
		}
	}
	return len;
}
int MySql::GetBinaryValue(int row,int fd_num,char * pBuf)
{
	PROWS rows=NULL;
	int len=0;
	char * p=NULL;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return NULL;
	rows=(PROWS)res[row];
    
	len=rows->fields[fd_num].value_len;

	if(pBuf==NULL)
		return len;
  
	//直接返回此列的值
	 p=(char *)(rows->fields[fd_num].filed_value);
	 memcpy(pBuf,p,len);
	 return len;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩亚洲另类| 337p日本欧洲亚洲大胆精品| 欧美日韩国产美| 国产日韩欧美制服另类| 亚洲国产日韩精品| 99久久精品免费看国产免费软件| 欧美日本视频在线| 亚洲视频 欧洲视频| 国产综合色精品一区二区三区| 欧洲色大大久久| 中文字幕在线不卡视频| 激情深爱一区二区| 7777精品伊人久久久大香线蕉超级流畅| 亚洲国产成人午夜在线一区| 精品一区精品二区高清| 欧美丰满高潮xxxx喷水动漫| 一区二区三区中文免费| 波波电影院一区二区三区| 久久久久久久久久久久久久久99| 日韩不卡手机在线v区| 91官网在线免费观看| 国产精品国产三级国产| 国产麻豆91精品| 精品国产污网站| 久久精品久久99精品久久| 欧美顶级少妇做爰| 丝袜a∨在线一区二区三区不卡| 色婷婷久久99综合精品jk白丝| 国产精品免费aⅴ片在线观看| 国内精品免费在线观看| 日韩欧美一区二区久久婷婷| 日本中文一区二区三区| 91麻豆精品91久久久久久清纯| 亚洲国产乱码最新视频| 精品视频色一区| 天天做天天摸天天爽国产一区 | 欧美成人在线直播| 麻豆成人免费电影| 欧美成人官网二区| 国产成人午夜精品影院观看视频| 久久女同精品一区二区| 国产精品一区二区久激情瑜伽| 欧美精品一区视频| 粉嫩13p一区二区三区| 亚洲四区在线观看| 欧美在线不卡视频| 五月激情综合网| 精品国产免费视频| 成人一区二区视频| 一区二区三区在线高清| 欧美精品一二三| 久久草av在线| 中文字幕五月欧美| 欧美日韩国产一二三| 麻豆免费看一区二区三区| 久久一二三国产| 99re这里只有精品首页| 亚洲国产视频直播| 2020国产精品自拍| 91网站视频在线观看| 亚洲bt欧美bt精品777| 久久亚洲精品小早川怜子| 成人听书哪个软件好| 亚洲一本大道在线| 久久精品亚洲麻豆av一区二区| aaa欧美大片| 蜜桃久久久久久久| 国产精品国产自产拍高清av| 欧美欧美欧美欧美首页| 国产不卡在线播放| 午夜精品久久久久久久久久久| 久久先锋影音av| 在线观看国产91| 韩国成人在线视频| 亚洲专区一二三| 久久精品夜色噜噜亚洲aⅴ| 欧美午夜精品一区二区蜜桃| 国产一区二区精品久久99| 亚洲影院在线观看| 国产喷白浆一区二区三区| 91.麻豆视频| 91欧美一区二区| 国产精品资源站在线| 五月婷婷综合激情| 成人欧美一区二区三区黑人麻豆| 日韩一级完整毛片| 欧美三日本三级三级在线播放| 国产精品影视在线观看| 日韩中文字幕区一区有砖一区| 中文字幕一区av| 国产人伦精品一区二区| 日韩欧美一级精品久久| 欧美日韩的一区二区| 色综合亚洲欧洲| 成人免费看片app下载| 国产在线精品一区二区三区不卡 | 一区二区成人在线| 国产精品素人视频| 久久婷婷综合激情| 欧美大尺度电影在线| 欧美精品三级在线观看| 色欧美日韩亚洲| 97久久超碰国产精品电影| 福利一区二区在线| 国产69精品久久99不卡| 国产一区二区三区电影在线观看| 奇米一区二区三区av| 日韩国产高清影视| 日韩成人一级片| 热久久免费视频| 麻豆成人91精品二区三区| 奇米色777欧美一区二区| 全国精品久久少妇| 麻豆精品在线视频| 奇米色777欧美一区二区| 蜜乳av一区二区| 久久精品72免费观看| 美女久久久精品| 国产成人在线色| 国产精品一区2区| 国产a级毛片一区| 国产69精品久久久久毛片| 国产成人午夜精品5599| 国产91精品久久久久久久网曝门| 国产风韵犹存在线视精品| 国产99久久精品| 99视频一区二区三区| 99精品偷自拍| 欧美午夜精品久久久久久孕妇| 欧美色图在线观看| 7878成人国产在线观看| 久久综合九色综合欧美98| 国产欧美日韩卡一| 一区二区三区欧美在线观看| ...av二区三区久久精品| 亚洲青青青在线视频| 亚洲高清免费观看| 老鸭窝一区二区久久精品| 国产盗摄女厕一区二区三区| 99视频一区二区| 宅男噜噜噜66一区二区66| 久久精品亚洲国产奇米99| 亚洲视频在线一区| 日本不卡一区二区三区| 国产福利一区在线| 欧美性受极品xxxx喷水| 精品国产免费一区二区三区香蕉 | 国产欧美一区二区精品性色超碰| 欧美国产日韩亚洲一区| 亚洲国产cao| 国产91在线看| 欧美日韩中文字幕精品| 精品国产乱码久久久久久闺蜜| 亚洲婷婷综合色高清在线| 日日摸夜夜添夜夜添亚洲女人| 国内精品自线一区二区三区视频| 99精品国产一区二区三区不卡| 欧美一区二区三区四区五区| 国产精品福利影院| 蜜臀精品久久久久久蜜臀| 91理论电影在线观看| 日韩一区二区三区在线视频| 国产精品国模大尺度视频| 日日夜夜免费精品| 91蝌蚪porny| 久久久.com| 轻轻草成人在线| 91黄色免费网站| 久久久久久亚洲综合影院红桃| 一区二区高清免费观看影视大全 | 日本免费新一区视频| 99久久综合色| 日韩美女视频在线| 亚洲国产精品一区二区www在线| 国产二区国产一区在线观看| 欧美一区二区视频在线观看2020 | 亚洲精品乱码久久久久| 国产一区二区三区精品欧美日韩一区二区三区 | 成人爱爱电影网址| 精品污污网站免费看| 中文成人综合网| 全国精品久久少妇| 国产午夜精品一区二区三区四区| 天天影视色香欲综合网老头| 国产精品18久久久久久久久久久久| 欧美日韩精品一区二区三区蜜桃| 亚洲男女毛片无遮挡| 色视频成人在线观看免| 日韩av高清在线观看| 欧美日韩电影在线播放| 日韩影视精彩在线| 精品国产乱码久久| 国产精品一品二品| 国产欧美一区二区在线观看| 成人一区二区三区在线观看| 国产精品久久久久永久免费观看 | 国模一区二区三区白浆| 日韩精品一区二区三区老鸭窝| 另类小说视频一区二区| 国产三级欧美三级日产三级99|