程序运行后,为什么mysql_real_query函数返回值总是为0值?
头文件#if !defined(AFX_FRM_LOGIN_H__EA29EF2B_5CDB_41BF_A82A_8C0272E4ADD2__INCLUDED_)
#define AFX_FRM_LOGIN_H__EA29EF2B_5CDB_41BF_A82A_8C0272E4ADD2__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// frm_Login.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// Cfrm_Login dialog
class Cfrm_Login : public CDialog
{
// Construction
public:
Cfrm_Login(CWnd* pParent = NULL); // standard constructor
//***************************
MYSQL *pConn; //数据库连接句柄
MYSQL_RES *result;
MYSQL_ROW row;
//***************************
//定义全局变量
//***************************
CString strgbUserName;
//***************************
// Dialog Data
//{{AFX_DATA(Cfrm_Login)
enum { IDD = frm_Login };
CComboBox m_strUserName;
CString m_strPassWord;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(Cfrm_Login)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(Cfrm_Login)
afx_msg void OncmdConfirm();
afx_msg void OncmdCancel();
virtual BOOL OnInitDialog();
afx_msg void OnDestroy();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_FRM_LOGIN_H__EA29EF2B_5CDB_41BF_A82A_8C0272E4ADD2__INCLUDED_)
程序文件
// frm_Login.cpp : implementation file
//
#include "stdafx.h"
#include "HVAC SMART.h"
#include "frm_Login.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// Cfrm_Login dialog
Cfrm_Login::Cfrm_Login(CWnd* pParent /*=NULL*/)
: CDialog(Cfrm_Login::IDD, pParent)
{
//{{AFX_DATA_INIT(Cfrm_Login)
m_strPassWord = _T("");
//}}AFX_DATA_INIT
}
void Cfrm_Login::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(Cfrm_Login)
DDX_Control(pDX, cboUserName, m_strUserName);
DDX_Text(pDX, txtPassWord, m_strPassWord);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(Cfrm_Login, CDialog)
//{{AFX_MSG_MAP(Cfrm_Login)
ON_BN_CLICKED(cmdConfirm, OncmdConfirm)
ON_BN_CLICKED(cmdCancel, OncmdCancel)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// Cfrm_Login message handlers
void Cfrm_Login::OncmdConfirm()
{
// TODO: Add your control notification handler code here
//***********************
UpdateData(true);//从界面上获取控件数据给相应的变量
if (m_strUserName.GetCurSel()==-1)//如果没有选择将会返回-1
{
MessageBox("请先选择用户名!","系统提示",MB_ICONWARNING|MB_OK);
GetDlgItem(cboUserName)->SetFocus();
return;
}
CString strTemp,strUserId,strSQL;
m_strUserName.GetLBText(m_strUserName.GetCurSel(),strTemp);//把cboUserName中指定的内容赋值给strTemp
strUserId=strTemp.Left(strTemp.Find(' '));//从左边取发现空格为止的字符串
strSQL.Format("select * from uUser where fuserid=\'%s\' and fpassword=\'%s\'",strUserId,m_strPassWord);
if(mysql_real_query(pConn,(char*)(LPCTSTR)strSQL,(UINT)strSQL.GetLength())!=0)//此处不管密码正确与否都只执行下面else的程序代码段,不知为什么??
{
MessageBox("用户密码不正确,请重新输入!","系统提示",MB_ICONWARNING|MB_OK);
GetDlgItem(txtPassWord)->SetFocus();
return;
}
else
{
strgbUserName=strTemp.Right(strTemp.Find(' ')-1);//取得cboUserName中的用户名
//mysql_free_result(result);//释放结果集
CDialog::OnOK();//关闭对话框
}
//***********************
}
void Cfrm_Login::OncmdCancel()
{
// TODO: Add your control notification handler code here
//***********************
CDialog::OnCancel();
//***********************
}
BOOL Cfrm_Login::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
//初始化数据库
//************************************
pConn=mysql_init (NULL);
if(!mysql_real_connect(pConn,strDBHost,strDBUserName,strDBPassWord,strDBName,intDBPort,NULL,0))//连接数据库
{
MessageBox("数据库连接失败!","系统提示",MB_ICONWARNING|MB_OK);
return FALSE;
}
mysql_options(pConn,MYSQL_SET_CHARSET_NAME,"gb2312");//防止乱码
//************************************
//为cboUserName控件加载初始数据
//************************************
if(mysql_query(pConn,"select * from uUser")!=0)//发出一个以空字符结束的查询串
{
MessageBox("查询失败!","系统提示",MB_ICONWARNING|MB_OK);
return false;
}
else
{
if(!(result=mysql_store_result(pConn)))//一次性传送结果
{
return false;
}
else
{
for(int i=0;i<mysql_num_rows(result);i++)//获取行数
{
row = mysql_fetch_row(result);//从结果集中获取下一行,取得当前记录行
char temp[32];
strcpy(temp,row[0]);
strcat(temp," ");
m_strUserName.AddString(strcat(temp,row[1]));//取得当前记录列
}
}
mysql_free_result(result);//释放结果集使用的内存
}
//************************************
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void Cfrm_Login::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
//关闭数据库连接
//*************************************
mysql_close(pConn);
//*************************************
}
刚学VC6.0,有很多不懂的地方,请哪位大虾帮我指点一下,谢谢!!