⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sample01view.cpp

📁 vc百例之一
💻 CPP
字号:
// Sample39View.cpp : implementation of the CSample01View class
//

#include "stdafx.h"
#include "Sample01.h"

#include "Sample01Doc.h"
#include "Sample01View.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSample01View

IMPLEMENT_DYNCREATE(CSample01View, CFormView)

BEGIN_MESSAGE_MAP(CSample01View, CFormView)
	//{{AFX_MSG_MAP(CSample01View)
	ON_COMMAND(ID_INITENV, OnInitenv)
	ON_COMMAND(ID_SQLCONNECT, OnSqlconnect)
	ON_COMMAND(ID_SQLDRIVERCONNECT, OnSqldriverconnect)
	ON_COMMAND(ID_DISCONNECT, OnDisconnect)
	ON_COMMAND(ID_SQLEXECDIRECT, OnSqlexecdirect)
	ON_COMMAND(ID_PREPAREEXECUTE, OnPrepareexecute)
	ON_COMMAND(ID_PARAMETER, OnParameter)
	ON_COMMAND(ID_FETCHNEXT, OnFetchnext)
	ON_COMMAND(ID_SQLUPDATE, OnSqlupdate)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSample01View construction/destruction

CSample01View::CSample01View()
	: CFormView(CSample01View::IDD)
{
	//{{AFX_DATA_INIT(CSample01View)
	m_sDept = _T("");
	m_sEmail = _T("");
	m_nID = 0;
	m_sName = _T("");
	m_sPhone = _T("");
	m_sRemark = _T("");
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CSample01View::~CSample01View()
{
}

void CSample01View::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSample01View)
	DDX_Text(pDX, IDC_DEPT, m_sDept);
	DDX_Text(pDX, IDC_EMAIL, m_sEmail);
	DDX_Text(pDX, IDC_ID, m_nID);
	DDX_Text(pDX, IDC_NAME, m_sName);
	DDX_Text(pDX, IDC_PHONE, m_sPhone);
	DDX_Text(pDX, IDC_REMARK, m_sRemark);
	//}}AFX_DATA_MAP
}

BOOL CSample01View::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFormView::PreCreateWindow(cs);
}

void CSample01View::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();

}

/////////////////////////////////////////////////////////////////////////////
// CSample01View printing

BOOL CSample01View::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CSample01View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CSample01View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

void CSample01View::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
	// TODO: add customized printing code here
}

/////////////////////////////////////////////////////////////////////////////
// CSample01View diagnostics

#ifdef _DEBUG
void CSample01View::AssertValid() const
{
	CFormView::AssertValid();
}

void CSample01View::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CSample01Doc* CSample01View::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSample01Doc)));
	return (CSample01Doc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CSample01View message handlers

void CSample01View::OnInitenv() 
{
	// 分配环境句柄
	m_sr = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &m_hEnv);
	if (m_sr != SQL_SUCCESS)
		TRACE("分配环境句柄失败\n");

	// 设置环境属性
	m_sr = SQLSetEnvAttr(m_hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
	if (m_sr != SQL_SUCCESS)
		TRACE("设置环境属性失败\n");
	
	// 分配连接句柄
	m_sr = SQLAllocHandle(SQL_HANDLE_DBC, m_hEnv, &m_hDbc);
	if (m_sr != SQL_SUCCESS)
		TRACE("分配连接句柄失败\n");
	
	// 设置连接属性
	m_sr = SQLSetConnectAttr(m_hDbc, SQL_ATTR_LOGIN_TIMEOUT, (void*)5, 0);
	if (m_sr != SQL_SUCCESS)
		TRACE("设置连接属性失败\n");
}

void CSample01View::OnSqlconnect() 
{
	// 与数据源建立连接
	m_sr = SQLConnect(m_hDbc, (LPBYTE)"演示数据库", SQL_NTS, NULL, SQL_NTS, NULL, SQL_NTS);
	if (m_sr != SQL_SUCCESS)
		TRACE("连接数据源失败\n");
}

void CSample01View::OnSqldriverconnect() 
{
	// 返回的连接字符串
	SQLCHAR sqlConnStr[256];

	// 返回的连接字符串长度
	short  nConnStrLen = 0;

	// 父窗口句柄
	HWND hWnd = ::FindWindow(NULL, "ODBC API数据库编程演示程序");	

	// 弹出对话框由用户动态选择数据源
	m_sr = SQLDriverConnect(m_hDbc, hWnd, NULL, 0, sqlConnStr, 256, &nConnStrLen, SQL_DRIVER_PROMPT);
	if (m_sr == SQL_SUCCESS)
		TRACE("连接数据源失败\n");
}

void CSample01View::OnSqlexecdirect() 
{
	// 分配语句句柄
	m_sr = SQLAllocHandle(SQL_HANDLE_STMT, m_hDbc, &m_hStmt);
	if (m_sr != SQL_SUCCESS)
		TRACE("分配语句句柄失败\n");

	// 要执行的语句
	SQLCHAR sqlStatement[] = "INSERT INTO 员工档案表 VALUES(1, '王一', '市场部', '2938', 'wangyi@sohu.com', '直接执行结果')";

	// 直接执行语句
	m_sr = SQLExecDirect(m_hStmt, sqlStatement, SQL_NTS);
	if (m_sr != SQL_SUCCESS)
		TRACE("直接执行语句失败\n");

	// 释放语句句柄
	m_sr = SQLFreeHandle(SQL_HANDLE_STMT, m_hStmt);
	if (m_sr != SQL_SUCCESS)
		TRACE("释放语句句柄失败\n");
}

void CSample01View::OnPrepareexecute() 
{
	// 分配语句句柄
	m_sr = SQLAllocHandle(SQL_HANDLE_STMT, m_hDbc, &m_hStmt);
	if (m_sr != SQL_SUCCESS)
		TRACE("分配语句句柄失败\n");

	// 要执行的语句
	SQLCHAR sqlStatement[] = "INSERT INTO 员工档案表 VALUES(1, '王一', '市场部', '2938', 'wangyi@sohu.com', '准备执行结果')";
	
	// 准备SQL语句
	m_sr = SQLPrepare(m_hStmt, sqlStatement, SQL_NTS);
	if (m_sr != SQL_SUCCESS)
		TRACE("准备语句失败\n");
	
	// 重复执行
	for (int i = 0; i < 10; i++)
	{
		m_sr = SQLExecute(m_hStmt);
		if (m_sr != SQL_SUCCESS)
			TRACE("准备执行语句失败\n");
	}

	// 释放语句句柄
	m_sr = SQLFreeHandle(SQL_HANDLE_STMT, m_hStmt);
	if (m_sr != SQL_SUCCESS)
		TRACE("释放语句句柄失败\n");
}

void CSample01View::OnParameter() 
{
	// 分配语句句柄
	m_sr = SQLAllocHandle(SQL_HANDLE_STMT, m_hDbc, &m_hStmt);
	if (m_sr != SQL_SUCCESS)
		TRACE("分配语句句柄失败\n");

	// 要执行的语句
	SQLCHAR sqlStatement[] = "INSERT INTO 员工档案表 VALUES(?, '王一', '市场部', '2938', 'wangyi@sohu.com', '准备执行结果')";
	
	// 准备SQL语句
	m_sr = SQLPrepare(m_hStmt, sqlStatement, SQL_NTS);
	if (m_sr != SQL_SUCCESS)
		TRACE("准备语句失败\n");

	// 绑定参数
	int nID;
	SQLINTEGER Param1Len;
	m_sr = SQLBindParameter(m_hStmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &nID, sizeof(nID), &Param1Len);
	if (m_sr != SQL_SUCCESS)
		TRACE("绑定参数失败\n");

	// 重复执行
	for (int i = 0; i < 10; i++)
	{
		// 动态输入数据
		nID = i;
		Param1Len = sizeof(nID);
		
		// 执行参数化SQL语句
		m_sr = SQLExecute(m_hStmt);
		if (m_sr != SQL_SUCCESS)
			TRACE("准备执行语句失败\n");
	}

	// 释放语句句柄
	m_sr = SQLFreeHandle(SQL_HANDLE_STMT, m_hStmt);
	if (m_sr != SQL_SUCCESS)
		TRACE("释放语句句柄失败\n");
}

void CSample01View::OnFetchnext() 
{
	// 要绑定的变量
	SQLINTEGER ID;
	SQLCHAR Name[10];
	SQLCHAR Dept[10];
	SQLCHAR Phone[10];
	SQLCHAR Email[20];
	SQLCHAR Remark[10];

	SQLINTEGER NameLenOrInd[6];

	// 分配语句句柄
	m_sr = SQLAllocHandle(SQL_HANDLE_STMT, m_hDbc, &m_hStmt);
	if (m_sr != SQL_SUCCESS)
		TRACE("分配语句句柄失败\n");

	// 执行SQL查询语句
	m_sr = SQLExecDirect(m_hStmt, (LPBYTE)"SELECT * FROM 员工档案表", SQL_NTS);
	if (m_sr != SQL_SUCCESS)
		TRACE("执行语句失败\n");

	// 绑定各字段到变量
	m_sr = SQLBindCol(m_hStmt, 1, SQL_C_SLONG, &ID, sizeof(ID), &NameLenOrInd[0]); 
	if (m_sr != SQL_SUCCESS)
		TRACE("绑定字段失败\n");
	
	m_sr = SQLBindCol(m_hStmt, 2, SQL_C_CHAR, Name, sizeof(Name), &NameLenOrInd[1]); 
	if (m_sr != SQL_SUCCESS)
		TRACE("绑定字段失败\n");

	m_sr = SQLBindCol(m_hStmt, 3, SQL_C_CHAR, Dept, sizeof(Dept), &NameLenOrInd[2]); 
	if (m_sr != SQL_SUCCESS)
		TRACE("绑定字段失败\n");
	
	m_sr = SQLBindCol(m_hStmt, 4, SQL_C_CHAR, Phone, sizeof(Phone), &NameLenOrInd[3]); 
	if (m_sr != SQL_SUCCESS)
		TRACE("绑定字段失败\n");

	m_sr = SQLBindCol(m_hStmt, 5, SQL_C_CHAR, Email, sizeof(Email), &NameLenOrInd[4]); 
	if (m_sr != SQL_SUCCESS)
		TRACE("绑定字段失败\n");
	
	m_sr = SQLBindCol(m_hStmt, 6, SQL_C_CHAR, Remark, sizeof(Remark), &NameLenOrInd[5]); 
	if (m_sr != SQL_SUCCESS)
		TRACE("绑定字段失败\n");

	// 取下一行记录数据
	m_sr = SQLFetch(m_hStmt);
	if (m_sr != SQL_NO_DATA)
	{
		m_nID = ID;
		m_sName = CString(Name);
		m_sDept = CString(Dept);
		m_sPhone = CString(Phone);
		m_sEmail = CString(Email);
		m_sRemark = CString(Remark);
	}
	else
	{
		m_nID = 0;
		m_sName = "空字段";
		m_sDept = "空字段";
		m_sPhone = "空字段";
		m_sEmail = "空字段";
		m_sRemark = "空字段";
	}

	// 关闭光标
	m_sr = SQLCloseCursor(m_hStmt);
	if (m_sr != SQL_SUCCESS)
		TRACE("关闭光标失败\n");

	// 释放语句句柄
	m_sr = SQLFreeHandle(SQL_HANDLE_STMT, m_hStmt);
	if (m_sr != SQL_SUCCESS)
		TRACE("释放语句句柄失败\n");

	// 更新显示
	UpdateData(FALSE);	
}

void CSample01View::OnSqlupdate() 
{
	// 要绑定的变量
	SQLINTEGER ID;
	SQLCHAR Name[10];
	SQLCHAR Dept[10];
	SQLCHAR Phone[10];
	SQLCHAR Email[20];
	SQLCHAR Remark[10];

	SQLINTEGER NameLenOrInd[6];

	// 分配语句句柄
	m_sr = SQLAllocHandle(SQL_HANDLE_STMT, m_hDbc, &m_hStmt);
	if (m_sr != SQL_SUCCESS)
		TRACE("分配语句句柄失败\n");

	// 设置语句属性
	m_sr = SQLSetStmtAttr(m_hStmt, SQL_ATTR_CURSOR_TYPE, (void*)SQL_CURSOR_DYNAMIC, SQL_IS_UINTEGER);
	if (m_sr != SQL_SUCCESS)
		TRACE("语句属性更改失败\n");

	m_sr = SQLSetStmtAttr(m_hStmt, SQL_ATTR_CONCURRENCY, (void*)SQL_CONCUR_LOCK, SQL_IS_UINTEGER);
	if (m_sr != SQL_SUCCESS)
		TRACE("语句属性更改失败\n");

	// 执行SQL查询语句
	m_sr = SQLExecDirect(m_hStmt, (LPBYTE)"SELECT * FROM 员工档案表", SQL_NTS);
	if (m_sr != SQL_SUCCESS)
		TRACE("执行语句失败\n");

	// 绑定各字段到变量
	m_sr = SQLBindCol(m_hStmt, 1, SQL_C_SLONG, &ID, sizeof(ID), &NameLenOrInd[0]); 
	if (m_sr != SQL_SUCCESS)
		TRACE("绑定字段失败\n");
	
	m_sr = SQLBindCol(m_hStmt, 2, SQL_C_CHAR, Name, sizeof(Name), &NameLenOrInd[1]); 
	if (m_sr != SQL_SUCCESS)
		TRACE("绑定字段失败\n");

	m_sr = SQLBindCol(m_hStmt, 3, SQL_C_CHAR, Dept, sizeof(Dept), &NameLenOrInd[2]); 
	if (m_sr != SQL_SUCCESS)
		TRACE("绑定字段失败\n");
	
	m_sr = SQLBindCol(m_hStmt, 4, SQL_C_CHAR, Phone, sizeof(Phone), &NameLenOrInd[3]); 
	if (m_sr != SQL_SUCCESS)
		TRACE("绑定字段失败\n");

	m_sr = SQLBindCol(m_hStmt, 5, SQL_C_CHAR, Email, sizeof(Email), &NameLenOrInd[4]); 
	if (m_sr != SQL_SUCCESS)
		TRACE("绑定字段失败\n");
	
	m_sr = SQLBindCol(m_hStmt, 6, SQL_C_CHAR, Remark, sizeof(Remark), &NameLenOrInd[5]); 
	if (m_sr != SQL_SUCCESS)
		TRACE("绑定字段失败\n");

	// 取下一行记录数据
	m_sr = SQLFetch(m_hStmt);
	if (m_sr != SQL_SUCCESS)
		TRACE("取下一行数据错误\n");

	// 对记录进行编辑(更新操作)
	ID = 10;
	strcpy((char*)Name, "张一");
	strcpy((char*)Dept, "培训部");
	strcpy((char*)Phone, "2823");
	strcpy((char*)Email, "zhangyi@sohu.com");
	strcpy((char*)Remark, "编辑记录");
	m_sr = SQLSetPos(m_hStmt, 3, SQL_UPDATE, SQL_LOCK_NO_CHANGE);
	if (m_sr != SQL_SUCCESS)
		TRACE("更新记录失败\n");
	
	// 关闭光标
	m_sr = SQLCloseCursor(m_hStmt);
	if (m_sr != SQL_SUCCESS)
		TRACE("关闭光标失败\n");

	// 释放语句句柄
	m_sr = SQLFreeHandle(SQL_HANDLE_STMT, m_hStmt);
	if (m_sr != SQL_SUCCESS)
		TRACE("释放语句句柄失败\n");
}

void CSample01View::OnDisconnect() 
{
	// 断开连接
	m_sr = SQLDisconnect(m_hDbc);	
	if (m_sr != SQL_SUCCESS)
		TRACE("断开连接失败\n");

	// 释放连接句柄
	m_sr = SQLFreeHandle(SQL_HANDLE_DBC, m_hDbc);
	if (m_sr != SQL_SUCCESS)
		TRACE("释放连接句柄失败\n");

	// 释放环境句柄
	m_sr = SQLFreeHandle(SQL_HANDLE_ENV, m_hEnv);
	if (m_sr != SQL_SUCCESS)
		TRACE("释放环境句柄失败\n");
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -