📄 sample01view.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 + -