20
2014
04

UC编程04-io读写write/read系统函数的使用

//myuc.h

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<string.h>
#include<sys/types.h>
#include<sys/mman.h>
#include<sys/stat.h>


20
2014
04

UC编程03-内存分配与内存映射函数sbrk/brk/mmap/munmap

函数说明:


code1

#include<stdio.h>
#include<unistd.h>
int main()
{
void* empty=sbrk(0);
void * p1=sbrk(4);//虚拟内存映最少射一个内存页4096字节
int *pi=p1;
*(pi+2)=120;//给p3赋值
void* p2=sbrk(4);
void* p3=sbrk(4);
printf("p1=%p,p2=%p,p3=%p\n",p1,p2,p3);
sbrk(-8);
sbrk(4093);
printf("4097字节\n");
sleep(15);
sbrk(-1);
printf("4096字节\n");
sleep(15);
sbrk(-4096);
printf("0字节\n");
sbrk(123);
double * pd=sbrk(0);//取最后空间的首地址
brk(pd+1);//分配一个double空间
int result=brk(empty);//回收所有
//printf("p1=%p,p2=%p,p3=%p\n",p1,p2,p3);
//printf("p3=%d\n",*(int*)p3);
return 0;
}

code2

20
2014
04

UC编程02-环境变量、errno错误查看函数

code1

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//extern char**envron;
//第三个参数为环境表首地址
int main(int argc,char ** argv,char **env){
extern char** environ;//外部全局变量,不改动
char **p=environ;
//输出所有环境变量
/*
while(*p!=NULL){
printf("%s\n",*p);
(p)++;
}
*/
char value[100]={};
p=environ;
char *val=getenv("USER");
if(val) printf("USER=%s\n",val);
char *myenv=getenv("MYENV");//获取环境变量
if(!myenv) putenv("MYENV=env1");//设置环境变量
myenv=getenv("MYENV");
if(myenv!=NULL) printf("myenv=%s\n",myenv);
return 0;
}

code2

20
2014
04

UC编程01-预处理

uc:unix c 的简称


code1:

#include<stdio.h>
int main()
{
#line 1550//指定下面一行行号为1550
int b=0;
printf("%d",a);
return 0;
}


code2:

20
2014
04

linux中stl模版的用法1

code1:

/*
 模版成员模版
 */
#include<iostream>
using namespace std;
template<typename V>
class Value
{
public:
Value(const V& v):m_v(v){}
V m_v;
};
template<typename K>
class Key
{
public:
Key(const K& k):m_k(k){}
K m_k;
template<typename V>
class Value
{
public:
Value(const V& v):m_v(v){}
V m_v;
};
};
int main()
{
Key<string> key("pi");
Key<string>::Value<double> value(3.1415);
cout<<key.m_k<<"  "<<value.m_v<<endl;
return 0;
}


09
2014
04

bshare手动分享网址到QQ空间、朋友网等常用网站代码


//示例代码:

<div style="width: 190px;">
<script type="text/javascript" charset="utf-8" src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=2&lang=zh"></script>
<script type="text/javascript" charset="utf-8" src=" 

分享到:<br />
<div style="position: absolute;">
<p style="width: 280px; height: 50px; padding-top: 5px;">
<strong style="color: #939393;"></strong><span class="BSHARE_COUNT bshare-share-count">
0</span> <a title="分享到新浪微博"></a><a title="分享到搜狐微博"


02
2014
04

c++将txt数据批量导入mysql数据库的例子

//包括多线程的使用,数据库的操作和打开文件对话框的使用。

#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include "resource.h"
#include "MainDlg.h"
#include <SQL.H>//连接库:odbc32.lib odbccp32.lib
#include <SQLEXT.H>//数据库头文件
#include <SQLTYPES.H>//数据库头文件
#include <COMMDLG.H>//OPENFILENAME 头文件
#include<STRING.H>
#define LOGIN_TIMEOUT 30
#define MAXBUFLEN 255
///#define CHECKDBSTMTERROR(hwnd,result,hstmt) 
char szFile[MAX_PATH];
BOOL ImportStatus = FALSE; //导入状态标志
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=123456;DATABASE=Test;CharSet=gbk;";
SQLCHAR ConnStrOut[MAXBUFLEN];
void ShowDBError(HWND hwnd,SQLSMALLINT type,SQLHANDLE sqlHandle)
{
    char pStatus[10], pMsg[101];
    SQLSMALLINT SQLmsglen;
    char error[200] = {0};
    SQLINTEGER SQLerr;
    long erg2 = SQLGetDiagRec(type, sqlHandle,1,
(SQLCHAR *)pStatus,&SQLerr,(SQLCHAR *)pMsg,100,&SQLmsglen);
    wsprintf(error,"%s (%d)\n",pMsg,(int)SQLerr);
    MessageBox(hwnd,error,TEXT("数据库执行错误"),MB_ICONERROR|MB_OK);
}
void ShowDBConnError(HWND hwnd,SQLHDBC hdbc)
{
ShowDBError(hwnd,SQL_HANDLE_DBC,hdbc);
}
void ShowDBStmtError(HWND hwnd,SQLHSTMT hstmt)
{
ShowDBError(hwnd,SQL_HANDLE_STMT,hstmt);
}
//查检是否有错误
BOOL CHECKDBSTMTERROR(HWND hwnd,SQLRETURN result,SQLHSTMT hstmt)
{
if(SQL_ERROR==result)
{
ShowDBStmtError(hwnd,hstmt);
return TRUE;
} 
else 
{
return FALSE;
}
}
BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
        HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
    }
    return FALSE;
}
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
    return TRUE;
}
//选择文件
void openfile(HWND hwnd)
{
OPENFILENAME ofn;//定义一个OPENFILENAME类型的结构体。
ZeroMemory(&ofn,sizeof(ofn));//使用结构体变量前把该结构体变量各个位清零。
ofn.lStructSize = sizeof(ofn);
ofn.lpstrFile = szFile; 
ofn.lpstrFile[0] = TEXT('\0');
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = TEXT("ALL\0*.*\0文本文档\0*.TXT\0");
ofn.nFilterIndex = 2;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if (GetOpenFileName(&ofn))
{
SetDlgItemText(hwnd,IDC_FILEINFO,szFile);
}
}
BOOL inport_begin(HWND hwnd)
{
//分配环境句柄
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 FALSE;
}
ImportStatus = TRUE;
return TRUE;
}
DWORD WINAPI ThreadFunc(LPVOID lpParam)                //多线程任务
{
HWND hwnd = (HWND)lpParam;
char str[50];
char fname[11];
char fage[11];
int  age;
int i,j,k;
int IntoNum = 0;
//TCHAR temp[256];
TCHAR info[256];
FILE * Input;
for (i=0;szFile[i]!='\0';++i)                        //处理绝对路径
{
if (szFile[i]=='\\')
{
szFile[i]='/';
}
}
if(strlen(szFile)==0){SetDlgItemText(hwnd,IDC_STATUS,"请选择文件!"); return 0;}
Input = fopen(szFile,"r");                                //打开文本文档
BOOL hasError=FALSE;
/*创建新的数据库句柄,执行SQL语句*/
result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
result = SQLPrepare(hstmt,(SQLCHAR *)"insert into T_Person(FName,FAge) values(?,?)",SQL_NTS);//两个占位符
SQLINTEGER iSQL_NTS=SQL_NTS;
while(!feof(Input)&&ImportStatus)                //判断文件流是否到末尾,并判断导入标志的状态
{
ZeroMemory(fname,sizeof(fname)/sizeof(char));
ZeroMemory(fage,sizeof(fage)/sizeof(char));
ZeroMemory(str,sizeof(str)/sizeof(char));
//ZeroMemory(temp,sizeof(temp)/sizeof(TCHAR));
ZeroMemory(info,sizeof(info)/sizeof(TCHAR));
fgets(str,50,Input);
for (i=0,j=0,k=0;str[k]!='\0';++k)                                        //将文件流中的姓名和年龄数据进行处理,存储到相应的变量中
{
if (str[k]>='A'&&str[k]<='Z' || str[k]>='a'&&str[k]<='z')
{
fname[i] = str[k];
++i;
} 
else
{
if (str[k]>='0'&&str[k]<='9')
{
fage[j] = str[k];
++j;
}
}
}
fname[i] = '\0';
fage[j] = '\0';
age = atoi(fage);
if(CHECKDBSTMTERROR(hwnd,result,hstmt)==TRUE) {hasError=TRUE;break;}
//给两个占位符赋值
SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,strlen(fname),0,fname,0,&iSQL_NTS);
SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_LONG,SQL_INTEGER,sizeof(int),0,&age,0,&iSQL_NTS);
result =SQLExecute(hstmt);
if(CHECKDBSTMTERROR(hwnd,result,hstmt)==TRUE) {hasError=TRUE;break;}
Sleep(30);
wsprintf(info,TEXT("正在导入第%d条数据"),++IntoNum);
SetDlgItemText(hwnd,IDC_STATUS,info);
}
fclose(Input);
SQLFreeStmt(hstmt,SQL_CLOSE);
SQLDisconnect(hdbc);                                        //如果到达末尾,跳出,并关闭数据库
SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
SQLFreeHandle(SQL_HANDLE_ENV,henv);
if(hasError==TRUE)
{
SetDlgItemText(hwnd,IDC_STATUS,TEXT("数据库操作出错,取消导入!"));
}
else if (ImportStatus)
{
SetDlgItemText(hwnd,IDC_STATUS,TEXT("恭喜您,所有的数据都已经导入成功!"));
}
else
{
SetDlgItemText(hwnd,IDC_STATUS,TEXT("您已经取消了数据库的导入!"));
}
return 0;
}
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
        case IDC_OK:
                {
                        if(inport_begin(hwnd))
{
                        CreateThread(NULL,0,ThreadFunc,hwnd,0,0);  //开始使用多线程调用函数
}
else
{
SetDlgItemText(hwnd,IDC_STATUS,TEXT("数据库连接出错,取消导入!"));
}
                        break;
                }
case IDC_CANCEL:
{
ImportStatus = FALSE;
break;
            }
case IDC_FILEOPEN:
openfile(hwnd);
break;
        default:
break;
    }
}
void Main_OnClose(HWND hwnd)
{
    EndDialog(hwnd, 0);
}


01
2014
04

c++中多线程的简单使用

code:

#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include "resource.h"
#include "MainDlg.h"
BOOL isCancel=FALSE;
HWND hwnd1;
BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
        HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
    }
    return FALSE;
}
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
hwnd1=hwnd;
    return TRUE;
}
DWORD WINAPI ThreadFun(LPVOID Lpparam)//要运行的耗时操作,如果要用 Lpparam 需要显式转换
{
SetDlgItemText(hwnd1,IDC_EDIT1,"正在连接服务器…");
Sleep(4000);
if(isCancel==TRUE)
{
SetDlgItemText(hwnd1,IDC_EDIT1,"登陆已取消!");
return -1;
}
SetDlgItemText(hwnd1,IDC_EDIT1,"正在验证密码…");
Sleep(4000);
if(isCancel==TRUE)
{
SetDlgItemText(hwnd1,IDC_EDIT1,"登陆已取消!");
return -1;
}
SetDlgItemText(hwnd1,IDC_EDIT1,"验证通过!");
return 0;
}
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
        case IDC_OK:
{
isCancel=FALSE;
CreateThread(NULL,0,ThreadFun,0,0,0);//新的线程运行函数,第4个参数可以给函数传参数值
}
        break;
case IDC_btnCancel:
{
isCancel=TRUE;
}
break;;
        default:
break;
    }
}
void Main_OnClose(HWND hwnd)
{
    EndDialog(hwnd, 0);
}


01
2014
04

c++几种常用的界面控件的使用1

code:

//c++文本输入框的操作:
bool isnumber(char *str1,char *str2)  //判断它是不是输入的数字
{
 int i,flag=1;
   for(i=0;i<strlen(str1);i++)
   {
    if ( (str1[i]<'0' || str1[i]>'9')&&str1[i]!='.'&&str1[i]!='.')   //右边小键盘上的和中间键盘上的点它不认为是相同的
    {
     flag=0;return FALSE;
    }
   }
   if (flag==1)
   {
    for(i=0;i<strlen(str2);i++)
     if ( (str2[i]<'0' || str2[i]>'9') &&str2[i]!='.'&&str1[i]!='.')   
     {
      flag=1;return FALSE;
     }
   }
   return TRUE;
}
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
 case IDC_OK:
  {
   TCHAR str1[256],str2[256];
   GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1));  //得到输入的字符串
   GetDlgItemText(hwnd,IDC_EDIT2,str2,sizeof(str2));//得到输入的字符串
   if (isnumber(str1,str2))
   {
   double i1=atof(str1);
   double i2=atof(str2);
   double i3;
   char str[256];
   HWND hwndcombo1 = GetDlgItem(hwnd,IDC_COMBO1);   //通过这个得到选择框的句柄
   int cursel=ComboBox_GetCurSel(hwndcombo1);  // 通过句柄得到选择了当前编号值
// 0 1 2 3分别为 + - * /  的编号值
 //  ComboBox_GetLBText(hwndcombo1,cursel,str);  // 通过编号值得到字符串值,放到str 里面,这里只有几个选项,直接用编号值判断就行
   switch(cursel)
   {
   case 0:
    i3=i1+i2;
    break;
   case 1:
    i3=i1-i2;
    break;
   case 2:
    i3=i1*i2;
    break;
   case 3:
    i3=i1/i2;
    break;
   }
   TCHAR str3[256];
   sprintf(str3,"%lf",i3);
   SetDlgItemText(hwnd,IDC_EDIT3,str3);
   }
   else
    SetDlgItemText(hwnd,IDC_EDIT3,"请输入数字");
  }
        break;
 default:
  break;
    }
}
//c++下拉框的操作。
case IDC_BUTTONADD:  //添加
   {
    TCHAR STR[256];
    GetDlgItemText(hwnd,IDC_EDITADD,STR,sizeof(STR)); // 得到添加框内的字符串
    if (STR!=NULL)
    {
    HWND COM1=GetDlgItem(hwnd,IDC_COMBO1);  // 组合框句柄
    ComboBox_AddString(COM1,STR);         //  向里面加入字符串
    SetDlgItemText(hwnd,IDC_EDITADD,NULL);   //  将添加框清空
    MessageBox(hwnd,"添加成功!","提示",MB_OK); 
    }
   }
        break;
   case IDC_BUTTONDEL: // 删除
    {
    HWND COM1=GetDlgItem(hwnd,IDC_COMBO1); 
    int cur=ComboBox_GetCurSel(COM1);    //  得到当前选择的项
    if (CB_ERR==cur)                   //  如果没有选择东西
    {
     MessageBox(hwnd,"没有数据被选择","错误",MB_OK|MB_ICONERROR);
    }
    ComboBox_DeleteString(COM1,cur);
    }
    break;
  case IDC_BUTTONSEARCH: // 查找
   {
    TCHAR STRS[256];
    GetDlgItemText(hwnd,IDC_EDITSEARCH,STRS,sizeof(STRS)); // 得到查找的字符串
    HWND EDITS= GetDlgItem(hwnd,IDC_COMBO1);       
    bool bfind=FALSE;
    int i=0,icount=ComboBox_GetCount(EDITS),ifind;      //   得到组合框中的数据有多少条
    for(;i<icount;i++)                             // 逐条搜索
    {
     TCHAR strte[256];
     ComboBox_GetLBText(EDITS,i,strte);       // 得到每条数据的字符串
     if (strcmp(strte,STRS)==0)            //  比较
     {
      bfind=true; ifind=i;break;
     }
    }
    if (bfind)         // 找到才提示,并将组合框中选中项设为找到的值
    {
     ComboBox_SetCurSel(EDITS,ifind);
     MessageBox(hwnd,TEXT("找到了"),TEXT("结果"),MB_OK);
    }
   }
   break;
//C++ 中列表框控件的使用():
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
        case IDC_OK:
{
MessageBox(hwnd,TEXT("adsdad"),TEXT("问好"),MB_OK);
}
break;
case IDC_btnAdd:
{
SendDlgItemMessage(hwnd,IDC_LIST1,LB_ADDSTRING,0,(LPARAM)"aaa");
SendDlgItemMessage(hwnd,IDC_LIST1,LB_ADDSTRING,0,(LPARAM)"bbb");
SendDlgItemMessage(hwnd,IDC_LIST1,LB_ADDSTRING,0,(LPARAM)"ccc");
SendDlgItemMessage(hwnd,IDC_LIST1,LB_ADDSTRING,0,(LPARAM)"ddd");
}
break;
case IDC_LIST1://IDC_LIST1的事件
{
if(LBN_DBLCLK==codeNotify)//双击事件
{
int index=SendDlgItemMessage(hwnd,IDC_LIST1,LB_GETCURSEL,0,0);
TCHAR buff[255];
SendDlgItemMessage(hwnd,IDC_LIST1,LB_GETTEXT,index,(LPARAM)buff);
MessageBox(hwnd,buff,"提示",MB_OK);
}
else if(LBN_SELCHANGE==codeNotify)//选项改变事件
{
int index=SendDlgItemMessage(hwnd,IDC_LIST1,LB_GETCURSEL,0,0);
TCHAR buff[255];
SendDlgItemMessage(hwnd,IDC_LIST1,LB_GETTEXT,index,(LPARAM)buff);
MessageBox(hwnd,buff,"提示",MB_OK);
}
}
break;
        default:
break;
    }
}
//C++MFC中列表框控件的使用():
 CListBox *listbox2= (CListBox*)GetDlgItem(IDC_LIST2); //获得列表框的指针
 listbox2->AddString("菠萝");       //为列表框添加列表项
 listbox2->AddString("苹果");       
 listbox2->AddString("桃子");
 listbox2->AddString("西瓜");
 listbox2->AddString("香蕉");
 CListBox *listbox3= (CListBox*)GetDlgItem(IDC_LIST3); //获得列表框的指针
 listbox3->AddString("格尺");       //为列表框添加列表项
 listbox3->AddString("橡皮");
 listbox3->AddString("胶带");
 listbox3->AddString("铅笔");
//【加在 BOOL CListTestDlg::OnInitDialog()里的】
void CListTestDlg::OnButton1()
{
 CListBox *listbox1= (CListBox*) GetDlgItem(IDC_LIST1); //得到列表控件的指针
 listbox1->AddString("北京");       //向列表中添加内容
 listbox1->AddString("长春");
 listbox1->AddString("上海");
 listbox1->AddString("南京");
}
void CListTestDlg::OnButton2()
{
 CListBox *listbox2=(CListBox*)GetDlgItem(IDC_LIST2); //得到列表控件的指针
 listbox2->SelectString(0,"桃子");      //查找列表中“桃子”一项
}
void CListTestDlg::OnSelchangeList3()
{
 CListBox *listbox3= (CListBox*)GetDlgItem(IDC_LIST3); //得到列表框的指针
 int select;       
 select=listbox3->GetCurSel();       //得到当前列表框中选项的索引
 CString str;
 listbox3->GetText(select,str);       //得到列表索引指向的文本内容
 CButton *button3= (CButton*)GetDlgItem(IDC_BUTTON3); //得到按钮指针
 button3->SetWindowText(str);       //设置按钮文本
}
void CListTestDlg::OnButton4()
{
 CListBox *listbox4= (CListBox*) GetDlgItem(IDC_LIST4); //得到列表控件指针
 listbox4->Dir(DDL_DIRECTORY,"c://*.*");     //向列表框中添加C盘驱动器文件名列表
}
//C++MFC中按钮控件的使用:
CButton *button1=(CButton*)GetDlgItem(IDC_BUTTON1);   //得到按钮的指针
 button1->ModifyStyle(0,BS_ICON);       //设置按钮风格为图表显示
 button1->SetIcon(AfxGetApp()->LoadIcon(IDI_ICON1));   //按钮以图标显示
 CButton *button3=(CButton*)GetDlgItem(IDC_BUTTON5);  
 button3->SetButtonStyle(BS_RADIOBUTTON);     //设置按钮风格为单选按钮
//【上面的是放在 BOOL CButtonTestDlg::OnInitDialog() 中的】
void CButtonTestDlg::OnButton2()
{
 SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR1));  //设置光标
}
void CButtonTestDlg::OnButton3()
{
 CButton *button5=(CButton*)GetDlgItem(IDC_BUTTON5);  //得到按钮指针
 button5->SetCheck(true);        //选中单选按钮
}
void CButtonTestDlg::OnButton4()
{
 CButton *button5=(CButton*)GetDlgItem(IDC_BUTTON5);  //得到按钮指针
 button5->SetCheck(false);        //取消单选按钮的选中
}
//C++MFC中编辑框的使用:
//四个编辑框,四个按钮,不同功能
void CEditTestDlg::OnButton1()
{
 CEdit* edit1= (CEdit*)GetDlgItem(IDC_EDIT1); //得到编辑框的指针
 edit1->SetWindowText("it科技");    //设置编辑框中的内容
}
void CEditTestDlg::OnButton2()
{
 CEdit* edit2= (CEdit*)GetDlgItem(IDC_EDIT2); //得到编辑框的指针
 edit2->Undo();         //取消上一次的操作
}
void CEditTestDlg::OnButton3()
{
 CEdit* edit3= (CEdit*)GetDlgItem(IDC_EDIT3); //得到编辑框的指针
 edit3->SetPasswordChar('*');     //设置密码输入字符
}
void CEditTestDlg::OnButton4()
{
 CEdit* edit4= (CEdit*)GetDlgItem(IDC_EDIT4); 
 edit4->ModifyStyle(0,ES_NUMBER); //第一个参数代表要移除的窗口风格,第二个是要添加的窗口风格(只能输入数字)
}


27
2014
03

c++ 连接MySql数据库并执行插入,查询数据测试代码

code:

#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include <SQL.H>//连接库:odbc32.lib odbccp32.lib
#include <SQLEXT.H>
#include <SQLTYPES.H>
#include "resource.h"
#include "MainDlg.h"
#define LOGIN_TIMEOUT 30
#define MAXBUFLEN 255
#define CHECKDBSTMTERROR(hwnd,result,hstmt) if(SQL_ERROR==result){ShowDBStmtError(hwnd,hstmt);return;}
/*
*/
BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
        HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
    }
    return FALSE;
}
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
    return TRUE;
}
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
        case IDC_OK:
{
Test(hwnd);
}
        break;
        default:
break;
    }
}
void Main_OnClose(HWND hwnd)
{
    EndDialog(hwnd, 0);
}
void ShowDBError(HWND hwnd,SQLSMALLINT type,SQLHANDLE sqlHandle)
{
    char pStatus[10], pMsg[101];
    SQLSMALLINT SQLmsglen;
    char error[200] = {0};
    SQLINTEGER SQLerr;
    long erg2 = SQLGetDiagRec(type, sqlHandle,1,
(SQLCHAR *)pStatus,&SQLerr,(SQLCHAR *)pMsg,100,&SQLmsglen);
    wsprintf(error,"%s (%d)\n",pMsg,(int)SQLerr);
    MessageBox(hwnd,error,TEXT("数据库执行错误"),MB_ICONERROR|MB_OK);
}
void ShowDBConnError(HWND hwnd,SQLHDBC hdbc)
{
ShowDBError(hwnd,SQL_HANDLE_DBC,hdbc);
}
void ShowDBStmtError(HWND hwnd,SQLHSTMT hstmt)
{
ShowDBError(hwnd,SQL_HANDLE_STMT,hstmt);
}
void Test(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=123456;DATABASE=test;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);
    //result = SQLPrepare(hstmt,(SQLCHAR*)"select id,name,age from student",SQL_NTS);//如果是查询
     result = SQLPrepare(hstmt,(SQLCHAR*)"insert into student(id,name,age) values(3,'wanger',30)",SQL_NTS);
CHECKDBSTMTERROR(hwnd,result,hstmt);
     result =SQLExecute(hstmt);
    CHECKDBSTMTERROR(hwnd,result,hstmt);
//显示查询数据开始
/*  SQLINTEGER cbsatid=SQL_NTS;
    TCHAR info[50]={0};
    while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND)
    {
        SQLCHAR name[20]; 
        SQLINTEGER id;
        SQLSMALLINT age;
        
        SQLGetData(hstmt,1,SQL_C_LONG,&id,sizeof(SQLINTEGER),&cbsatid);
        SQLGetData(hstmt,2,SQL_C_CHAR,name,20,&cbsatid);
        SQLGetData(hstmt,3,SQL_C_TINYINT,&age,sizeof(SQLSMALLINT),&cbsatid);
        wsprintf(info,"%i,%s,%i",id,name,age);
        MessageBox(NULL,info,"提示",MB_OK);
    }
*/
//显示查询数据结束
    SQLFreeStmt(hstmt,SQL_CLOSE);
    SQLDisconnect(hdbc);
    SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
    SQLFreeHandle(SQL_HANDLE_ENV,henv);
MessageBox(hwnd,TEXT("执行成功"),TEXT("标题"),MB_OK);
}