关于C语言的一个问题。
我用MySql想做一个简单的数据库模拟登录,注册程序。然后我想在用户点击注册的时候,然后要注册的用户名已经在数据库里面了,就找到他的密码进行更新。
但是写了好久好久,还是无法更新数据。
请大家指点指点,
谢谢!
程序代码:
#define MAX_USERNAME 20 #define MAX_PASSWORD 20 #define MAX_SQLWORD 120 void SaveUser(HWND hwnd) { SQLHENV henv = NULL; SQLHDBC hdbc = NULL; SQLHSTMT hstmt = NULL; SQLRETURN result; SQLCHAR ConnStrIn[MAXBUFLEN] = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;UID=root;PWD=root;DATABASE=mydb;CharSet=gbk;"; SQLCHAR ConnStrOut[MAXBUFLEN]; //分配环境句柄 result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); //设置管理环境属性 result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); //分配连接句柄 result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); //设置连接属性 result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (void*)LOGIN_TIMEOUT, 0); //连接数据库 result = SQLDriverConnect(hdbc,NULL, ConnStrIn,SQL_NTS, ConnStrOut,MAXBUFLEN, (SQLSMALLINT *)0,SQL_DRIVER_NOPROMPT); if(SQL_ERROR==result) { ShowDBConnError(hwnd,hdbc); return; } //初始化语句句柄 result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); TCHAR tInputUserName[MAX_USERNAME]; TCHAR tInputPassWord[MAX_PASSWORD]; TCHAR tSql[MAX_SQLWORD+10]; GetDlgItemText(hwnd,IDC_EDITUSERNAME,tInputUserName,MAX_USERNAME); GetDlgItemText(hwnd,IDC_EDITPASSWORD,tInputPassWord,MAX_PASSWORD); wsprintf(tSql,"SELECT FPassWord FROM T_User WHERE FUserName='%s'",tInputUserName);//SELECT过滤一次,把FUserName是这个都过滤出来 result = SQLPrepare(hstmt,(SQLCHAR*)tSql,SQL_NTS); CHECKDBSTMTERROR(hwnd,result,hstmt); ////////////////////////////////////////////////////////////////////////// //result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); //result = SQLPrepare(hstmt,(SQLCHAR*)"UPDATE T_User SET FPassWord='eee' WHERE FUserName='A'",SQL_NTS); //CHECKDBSTMTERROR(hwnd,result,hstmt); ////////////////////////////////////////////////////////////////////////// result =SQLExecute(hstmt); SQLINTEGER cbsatid=SQL_NTS; while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND)//找到相同的才进入循环,所以说有相同的用户名,然后就把他UPDATE { MessageBox(hwnd,TEXT("here"),TEXT(""),MB_OK); TCHAR tUpDatePassWord[MAX_PASSWORD]; wsprintf(tUpDatePassWord,"UPDATE T_User SET FPassWord='%s' WHERE FUserName='%s'",tInputPassWord,tInputUserName);//SELECT后,找到的密码都更新 result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); result = SQLPrepare(hstmt,(SQLCHAR*)tUpDatePassWord,SQL_NTS); CHECKDBSTMTERROR(hwnd,result,hstmt); break; } CHECKDBSTMTERROR(hwnd,result,hstmt); SQLFreeStmt(hstmt,SQL_CLOSE); SQLDisconnect(hdbc); SQLFreeHandle(SQL_HANDLE_DBC,hdbc); SQLFreeHandle(SQL_HANDLE_ENV,henv); MessageBox(hwnd,TEXT("执行SQL成功"),TEXT("SQL"),MB_OK|MB_ICONINFORMATION); }