MFC关于MYSQL的参数化查询语句

yuyuancsdn 2017-03-10 01:05:37
获取edit control中输入的数值,点击查询按钮,将符合条件的记录显示在list control中。
请大神帮忙看看,问题应该出在17-19行,m_edit是IDC_EDIT4的变量.
void CsqlsqlDlg::OnBnClickedButton5()
{
// TODO: 在此添加控件通知处理程序代码
MYSQL m_sqlCon;
MYSQL_ROW row;
MYSQL_RES *res;
mysql_init(&m_sqlCon);//初始化数据库对象
if (!mysql_real_connect(&m_sqlCon, "localhost", "root", "123456", "data", 3306, NULL, 0))
//localhost:服务器地址,可以直接填入IP;root:账号;123:密码;test:数据库名;3306:网络端口
{
AfxMessageBox(_T("数据库连接失败!"));
return;
}
else//连接成功则继续访问数据库,之后的相关操作代码基本是放在这里面的
{
mysql_query(&m_sqlCon, "SET NAMES 'GB2312'");//设置数据库字符格式,解决中文乱码问题
GetDlgItemText(IDC_EDIT4, m_edit);
UpdateData(TRUE);
char *mysqlstatements ="SELECT * FROM th WHERE id=m_edit";
if (mysql_real_query(&m_sqlCon,mysqlstatements, (unsigned long)strlen(mysqlstatements)))// 查询数据库中的"th"表
{
return;
}
res = mysql_store_result(&m_sqlCon);//得到存储结果集
if (NULL == res)//如果为空则返回
{
return;
}
int listrow = 0,i=0;
int cols=mysql_num_rows(res); //得到行数
int lies=mysql_num_fields(res); //得到每行的变量数
m_list.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES);//创建表头
m_list.InsertColumn(0,_T("id"),LVCFMT_LEFT,50,0);//第一列
m_list.InsertColumn(1,_T("D1"),LVCFMT_LEFT,50,1);//第二列
m_list.InsertColumn(2,_T("D2"),LVCFMT_LEFT,50,2);//第三列
m_list.InsertColumn(3,_T("D3"),LVCFMT_LEFT,50,3);//第四列
m_list.InsertColumn(4,_T("NC"),LVCFMT_LEFT,300,4);//第五列
while (row = mysql_fetch_row(res))//重复读取行,把数据放入列表中,直到row为NULL
{
for (int rols = 0; rols < lies; rols++)
{
CString myreaddata(row[rols]);
if (rols==0)
{
m_list.InsertItem(listrow,myreaddata);
}
else
{
m_list.SetItemText(listrow, rols, myreaddata);
}
}
listrow++;
}
}
mysql_close(&m_sqlCon);//关闭Mysql连接
}
...全文
163 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuyuancsdn 2017-03-12
  • 打赏
  • 举报
回复 1
已解决!!!
void CsqlsqlDlg::OnBnClickedButton5()
{
	// TODO: 在此添加控件通知处理程序代码
	MYSQL m_sqlCon;
	MYSQL_ROW row; 
	MYSQL_RES *res;
	mysql_init(&m_sqlCon);//初始化数据库对象
	if (!mysql_real_connect(&m_sqlCon, "localhost", "root", "123456", "data", 3306, NULL, 0))
		//localhost:服务器地址,可以直接填入IP;root:账号;123:密码;test:数据库名;3306:网络端口  
	{
		AfxMessageBox(_T("数据库连接失败!"));
		return;
	}
	else//连接成功则继续访问数据库,之后的相关操作代码基本是放在这里面的
	{
		mysql_query(&m_sqlCon, "SET NAMES 'GB2312'");//设置数据库字符格式,解决中文乱码问题
		char mysqlstatements[1024];  
		char charnc[256];
		CString str;
		GetDlgItem(IDC_EDIT4)->GetWindowText(str);
		sprintf(charnc,"%s",str);
		sprintf(mysqlstatements,"SELECT * FROM th WHERE id='%s';",charnc);
		if (mysql_real_query(&m_sqlCon,mysqlstatements, (unsigned long)strlen(mysqlstatements)))// 查询数据库中的"th"表  
		{
			return;
		}
		res = mysql_store_result(&m_sqlCon);//得到存储结果集  
		if (NULL == res)//如果为空则返回
		{ 
			return; 
		}
		int listrow = 0,i=0;
		int cols=mysql_num_rows(res);   //得到行数
		int lies=mysql_num_fields(res);  //得到每行的变量数
		m_list.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES);//创建表头
		m_list.InsertColumn(0,_T("id"),LVCFMT_LEFT,50,0);//第一列
		m_list.InsertColumn(1,_T("D1"),LVCFMT_LEFT,50,1);//第二列
		m_list.InsertColumn(2,_T("D2"),LVCFMT_LEFT,50,2);//第三列
		m_list.InsertColumn(3,_T("D3"),LVCFMT_LEFT,50,3);//第四列
		m_list.InsertColumn(4,_T("NC"),LVCFMT_LEFT,300,4);//第五列
		while (row = mysql_fetch_row(res))//重复读取行,把数据放入列表中,直到row为NULL 
		{
			for (int rols = 0; rols < lies; rols++)
			{
				CString myreaddata(row[rols]);
				if (rols==0)
				{
					m_list.InsertItem(listrow,myreaddata);
				}
				else
				{
					m_list.SetItemText(listrow, rols, myreaddata);
				}
			}
			listrow++;	
		}
	}
	mysql_close(&m_sqlCon);//关闭Mysql连接
}

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧