sql2008工作文档2

sql2008工作文档2

  • main
  • CSqlServer.h
  • CSqlServer.cpp

main

#pragma warning(disable : 4996)
#include "CSqlServer.h"
#include <string>
#include "resource.h"
#include <commdlg.h>
#pragma comment(lib, "Comdlg32.lib")
using namespace std;CSqlServer* cSql;
//main 按钮功能  开始
bool BConNect(HWND hwndDlg, CSqlServer* cSql);//连接数据库按钮
void BGetAdmin(HWND hwndDlg, CSqlServer* cSql);//获取用户管理员密码
void SetShowId(HWND hwndDlg, BOOL EDT, BOOL BTN);//设置按钮状态
void utf8_to_ascii(const char* utf8_str, char* buff);
//main 按钮功能  结束//EnableWindow(GetDlgItem(hwndDlg, EDT_NAME), EDT);BOOL CALLBACK DlgProc(HWND hwndDlg,UINT message,WPARAM wParam,LPARAM lParam)
{switch (message){case WM_INITDIALOG:{SendDlgItemMessage(hwndDlg, EDIT_SERVERIP, WM_SETTEXT, 0, (LPARAM)"192.168.0.166");SendDlgItemMessage(hwndDlg, EDT_DATEBASE, WM_SETTEXT, 0, (LPARAM)"t10erp");return true;}case WM_CLOSE:{EndDialog(hwndDlg, 0);return TRUE;}case WM_DESTROY:{//MessageBox(NULL, "WM_DESTROY", "TEST", 0);return true;}case WM_COMMAND:{WORD wId = LOWORD(wParam);//控件idWORD wMsg = HIWORD(wParam); //消息id(通告码)HWND hCtrl = (HWND)lParam;switch (wId){case BTN_CONNECTSERVER:{cSql = new CSqlServer;BConNect(hwndDlg, cSql);return true;}case BTN_GETADMIN:{BGetAdmin(hwndDlg, cSql);return true;}case BTN_DISCONNECTSERVER:{if (!cSql->DisConnect()){MessageBox(hwndDlg, "服务器连接断开失败", "ERROR DisConnect", MB_ICONEXCLAMATION);return true;}//处理一下字符串// Cstr.clear();delete cSql;cSql = nullptr;MessageBox(hwndDlg, "服务器连接断开成功","DisConnect",MB_OK);SetShowId(hwndDlg, true, true);return true;}case BTN_GETPATH:{OPENFILENAME  ofn;CHAR  szFileName[MAX_PATH];CHAR szFilter[] = TEXT("All Files (*.*)\0*.*\0\0");ZeroMemory(szFileName, MAX_PATH);ZeroMemory(&ofn, sizeof(ofn));ofn.lpstrFile = szFileName;ofn.nMaxFile = MAX_PATH;ofn.lpstrFilter = szFilter;ofn.lStructSize = sizeof(OPENFILENAME);ofn.hwndOwner = hwndDlg;if (GetOpenFileName(&ofn)) {//把数据发送到编辑框中SendDlgItemMessage(hwndDlg, EDIT_FILEPATH, WM_SETTEXT, 0, (LPARAM)szFileName);}//1 读文件内容FILE* fp = fopen(szFileName, "r");if (fp == NULL){printf("文件读取失败");return 0;}int a = 0;CHAR  szFileName1[MAX_PATH];CHAR  szFileName2[MAX_PATH];CHAR  szFileName3[MAX_PATH];while (!feof(fp))//类型需要自己定义去取{//没有数据返回-1a = fscanf(fp, "%s %s %s", &szFileName1, &szFileName2, &szFileName3);char buff[256];if (a < 0)break;}fclose(fp);}case BTN_UPDATE:{string str2 = "成品";string strSql = "select SingleId from cmMaterialCategory where CategoryName = " ;strSql += "\'" + str2 + "\'";bool ret =  cSql->Exec(strSql.c_str());if (!cSql->GetOneRows()){MessageBox(hwndDlg, "GetOneRows 失败", "ERROR", MB_ICONEXCLAMATION);return true;}//获取列数据  取出的数据存储在类的Sqldata里面if (!cSql->GetOneCols(1)){MessageBox(hwndDlg, "GetOneCols 失败", "ERROR", MB_ICONEXCLAMATION);return  true;}string str3 = (char*)cSql->m_SQLdata;cSql->FreeHstmt();string str5 = "where ProductNo = '一个机'";string str4 = "UPDATE cmProduct set CategoryId = ";str4 += "\'" + str3 + "\'" + str5;ret = cSql->Exec(str4.c_str());cSql->FreeHstmt();}}}}return FALSE;//不处理消息
}int APIENTRY WinMain(HINSTANCE g_hInstance, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow)
{DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);return 0;
}void BGetAdmin(HWND hwndDlg, CSqlServer* cSql)
{//执行SQL语句查询if (!cSql->Exec("select Password from sysuser where UserId = 'admin'")){MessageBox(hwndDlg, "Exec 失败", "ERROR", MB_ICONEXCLAMATION);return;}//获取行数据if (!cSql->GetOneRows()){MessageBox(hwndDlg, "GetOneRows 失败", "ERROR", MB_ICONEXCLAMATION);return;}//获取列数据  取出的数据存储在类的Sqldata里面if (!cSql->GetOneCols(1)){MessageBox(hwndDlg, "GetOneCols 失败", "ERROR", MB_ICONEXCLAMATION);return;}//把数据发送到编辑框中SendDlgItemMessage(hwndDlg, EDIT_admin, WM_SETTEXT, 0, (LPARAM)cSql->m_SQLdata);//释放结果集cSql->FreeHstmt();
}bool BConNect(HWND hwndDlg, CSqlServer* cSql)
{string Cstr;Cstr = "DRIVER={SQL Server};SERVER=";char szBuff[128] = { 0 };GetDlgItemText(hwndDlg, EDIT_SERVERIP, szBuff, sizeof(szBuff));Cstr += szBuff;Cstr += ";DATABASE=";memset(szBuff, 0, sizeof(szBuff));GetDlgItemText(hwndDlg, EDT_DATEBASE, szBuff, sizeof(szBuff));Cstr += szBuff;Cstr += ";UID=print;";Cstr += "PWD=print;";//SQLCHAR connStr[] = "DRIVER={SQL Server};SERVER=.;DATABASE=printerp;UID=print;PWD=print";//连接服务器if (!cSql->ConnectSql((char*)Cstr.data())){MessageBox(hwndDlg,"连接失败","测试", MB_ICONEXCLAMATION);return false;}MessageBox(hwndDlg, "连接成功", "测试", MB_OK);SetShowId(hwndDlg, false, false);return true;
}void SetShowId(HWND hwndDlg, BOOL EDT, BOOL BTN)//设置按钮状态
{EnableWindow(GetDlgItem(hwndDlg, EDIT_SERVERIP), EDT);EnableWindow(GetDlgItem(hwndDlg, EDT_DATEBASE), EDT);EnableWindow(GetDlgItem(hwndDlg, BTN_CONNECTSERVER), BTN);
}void utf8_to_ascii(const char* utf8_str,char* buff)
{int nCount = 0;int nLen = strlen(utf8_str);for (int i = 0; i < nLen; i++){if (utf8_str[i] < 0x80){buff[nCount] = utf8_str[i];nCount++;}}
}

CSqlServer.h

#pragma once
#include <windows.h>
#include <stdio.h>
#include <sql.h>  
#include <sqlext.h>  
//server 数据库连接操作
class CSqlServer
{public:
/** CSqlServer* 参数一 : 无* 功能   :默认构造* 返回值 :无
*/CSqlServer();
/** InitSql* 参数一 : 无* 功能   :初始化severSql数据库环境* 返回值 :bool类型  成功返回真 错误返回假
*/bool InitSql();/** ConnectSql* 参数一 : char*  传入连接服务器IP和数据库账号密码* 功能   :连接服务器数据库,并初始化执行数据库语句句柄* 返回值 :bool类型  成功返回真 错误返回假
*/bool ConnectSql(char* str);/** GetCols* 参数一 : 无* 功能   :获取当前执行表的列数* 返回值 :int  返回列数
*/int GetCols();/** GetRows* 参数一 : const char* cTableName --数据库下的哪个表名* 功能   :获取输入表名的行数* 返回值 :int  返回行数
*/int GetRows(const char* cTableName);/** Exec* 参数一 : const char* cSql --执行的SQL语句* 功能   :执行SQL语句* 返回值 :bool  成功返回真  失败返回假
*/bool Exec(const char* cSql);/** FreeHstmt* 参数一 : 无* 功能   :释放结果集:当执行完一条SQL语句,要释放其结果集。* 返回值 :bool  成功返回真  失败返回假
*/bool FreeHstmt();/** GetOneRows* 参数一 : 无* 功能   :获取执行SQL语句的数据* 返回值 :bool  成功返回真  失败返回假
*/bool GetOneRows();/** GetOneCols* 参数一 : int 要取第几列得数据* 功能   :获取行数的第几列数据* 返回值 :bool  成功返回真  失败返回假
*/bool GetOneCols(int nCols);/** GetData* 参数一 : 无* 功能   :获取执行SQL语句的数据* 返回值 :bool  成功返回真  失败返回假
*///bool GetData(int nCols);/** GetData* 参数一 : 无* 功能   :获取执行SQL语句的数据* 返回值 :bool  成功返回真  失败返回假
*/bool GetData(int nCols);/** DisConnect* 参数一 : 无* 功能   :断开数据库连接,并释放资源* 返回值 :无
*/bool DisConnect();/** ~CSqlServer* 参数一 : 无* 功能   :释放类资源* 返回值 :无
*/~CSqlServer();private:
/** SetData* 参数一 : 无* 功能   :修改获取的m_SQLdata结尾为"",修改为/0* 返回值 :无
*/void SetSqlData();public:SQLCHAR m_SQLdata[256];SQLINTEGER m_dataLen;
private:bool m_fDis;//记录释放标志  需要释放为true  不需要为falseSQLHENV m_henv;SQLHDBC m_hdbc;SQLHSTMT m_hstmt;
};

CSqlServer.cpp

#include "CSqlServer.h"CSqlServer::CSqlServer()
{memset(m_SQLdata,0,256);InitSql();}bool CSqlServer::InitSql()
{// 分配环境句柄  SQLRETURN  ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &m_henv);if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO){return false;}// 设置环境属性以使用ODBC 3.x  ret = SQLSetEnvAttr(m_henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO){return false;}// 分配连接句柄  ret = SQLAllocHandle(SQL_HANDLE_DBC, m_henv, &m_hdbc);if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO){return false;}return true;
}bool CSqlServer::ConnectSql(char* str)
{SQLRETURN ret = SQLDriverConnect(m_hdbc, NULL, (SQLCHAR*)str, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT);if (ret != SQL_SUCCESS_WITH_INFO && ret != SQL_SUCCESS){return false;}// 分配语句句柄并执行SQL脚本  SQLAllocHandle(SQL_HANDLE_STMT, m_hdbc, &m_hstmt);if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {return false;}m_fDis = true;return true;
}int CSqlServer::GetCols()
{SQLSMALLINT numCols;SQLRETURN ret = SQLNumResultCols(m_hstmt, &numCols);if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO){return 0;}return numCols;}int CSqlServer::GetRows(const char* cTableName)
{char buff[256] = { 0 };sprintf_s(buff,256,"%s%s","SELECT COUNT(*) FROM ", cTableName);if (!Exec(buff))//执行SQL语句{return -1;}//取执行语句后的数据/执行一次就会获取下一行的数据SQLRETURN ret = SQLFetch(m_hstmt);if (ret != SQL_SUCCESS){return -1;}ret = SQLGetData(m_hstmt, 1, SQL_C_CHAR, m_SQLdata, sizeof(m_SQLdata), &m_dataLen);if (ret != SQL_SUCCESS){return -1;}return true;}bool CSqlServer::Exec(const char* cSql)
{SQLRETURN ret = SQLExecDirect(m_hstmt, (SQLCHAR*)cSql, SQL_NTS);if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO){return false;}return true;
}bool CSqlServer::FreeHstmt()
{SQLRETURN ret = SQLFreeStmt(m_hstmt, SQL_CLOSE);if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO){return false;}return true;
}bool CSqlServer::GetOneRows()
{SQLRETURN ret = SQLFetch(m_hstmt);if (ret != SQL_SUCCESS){return false;}return true;
}bool CSqlServer::GetOneCols(int nCols)
{SQLRETURN ret = SQLGetData(m_hstmt, nCols, SQL_C_CHAR, m_SQLdata, sizeof(m_SQLdata), &m_dataLen);if (ret != SQL_SUCCESS){return false;}//处理m_SQLdata数据,取的长度是SQL定义的长度,是已""为结尾SetSqlData();return true;
}//bool CSqlServer::GetData(int nCols)
//
//{
//	SQLRETURN ret;
//	bool bTmp = false;
//		if (!GetOneRows())
//		{
//			return bTmp;
//		}
//		ret = SQLGetData(m_hstmt, nCols, SQL_C_CHAR, m_SQLdata, sizeof(m_SQLdata), &m_dataLen);
//	return false;
//}bool CSqlServer::GetData(int nCols)
{//取行的第一列数据if (!GetOneCols(nCols)){return false;}return true;
}bool CSqlServer::DisConnect()
{SQLRETURN ret = SQLFreeHandle(SQL_HANDLE_STMT, m_hstmt);if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO){return false;}ret = SQLDisconnect(m_hdbc);if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO){return false;}ret = SQLFreeHandle(SQL_HANDLE_DBC, m_hdbc);if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO){return false;}ret = SQLFreeHandle(SQL_HANDLE_ENV, m_henv);if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO){return false;}m_fDis = false;return true;
}CSqlServer::~CSqlServer()
{if (m_fDis){DisConnect();}}void CSqlServer::SetSqlData()
{for (int i = 0; i < m_dataLen; i++){if (m_SQLdata[i] == ' '){m_SQLdata[i] = '\0';}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/770809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pillow教程05:NumPy数组和PIL图像的相互转化

---------------Pillow教程集合--------------- Python项目18&#xff1a;使用Pillow模块&#xff0c;随机生成4位数的图片验证码 Python教程93&#xff1a;初识Pillow模块&#xff08;创建Image对象查看属性图片的保存与缩放&#xff09; Pillow教程02&#xff1a;图片的裁…

C++ union用法

在C中&#xff0c;union是一种特殊的数据类型&#xff0c;可以在同一个内存位置存储不同的数据类型。它的用法如下&#xff1a; 1. 声明union类型&#xff1a;使用关键字union加上union名称来声明一个union类型。 c union UnionName { dataType1 member1; dataType2 …

SpringBoot 文件上传(三)

之前讲解了如何接收文件以及如何保存到服务端的本地磁盘中&#xff1a; SpringBoot 文件上传&#xff08;一)-CSDN博客 SpringBoot 文件上传&#xff08;二&#xff09;-CSDN博客 这节讲解如何利用阿里云提供的OSS&#xff08;Object Storage Service)对象存储服务保存文件。…

2024华为软件精英挑战赛记录

前言 本次主要是记录自己第一次参加华为软件挑战赛的经历。第一次参加比赛还是缺少经验&#xff0c;训练赛中拿到赛区的20多名&#xff0c;最后在正式赛中被反超了&#xff0c;只拿了40多名&#xff0c;实在是感到可惜。 题目&#xff1a;本次题目是一个智慧港口的问题。10个机…

vite5+vue3+ import.meta.glob动态导入vue组件

import.meta.glob 是 Vite 提供的一个特殊功能&#xff0c;它允许你在模块范围内动态地导入多个模块。这在处理大量的文件&#xff0c;如组件、页面或其他模块时特别有用&#xff0c;特别是当你需要根据某些条件或模式来动态加载它们时。 1.创建需要动态导入的组件目录 假设你…

设计模式—观察者模式与发布订阅

观察者设计模式 观察者设计模式&#xff08;Observer Design Pattern&#xff09;是一种常用的软件设计模式&#xff0c;它是一种行为型模式。该模式用于定义对象之间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都将得到通知…

FTP 文件传输服务

FTP连接 控制连接&#xff1a;TCP 21&#xff0c;用于发送FTP命令信息 数据连接&#xff1a;TCP 20&#xff0c;用于上传、下载数据 数据连接的建立类型&#xff1a; 主动模式&#xff1a;服务端从 20 端口主动向客户端发起连接 被动模式&#xff1a;服务端在指定范围…

flink-connector-redis支持select查询

EN 1 项目介绍 基于bahir-flink二次开发&#xff0c;相对bahir调整的内容有&#xff1a; 1.使用Lettuce替换Jedis,同步读写改为异步读写&#xff0c;大幅度提升了性能 2.增加了Table/SQL API&#xff0c;增加select/维表join查询支持 3.增加关联查询缓存(支持增量与全量) 4…

flask_restful数据解析

参数验证也叫参数解析 Flask-Restful 插件提供了类似 WTForms 来验证提交的数据是否合法 的包&#xff0c;叫做 reqparse 。 # Flask_RESTFUl数据解析 from flask import Flask,render_template from flask_restful import Api,Resource from flask_restful.reqparse import …

项目3-留言板

1.创建项目 记得将project type改为maven 将需要的包引入其中 更改版本号 引入MYSQL相关包记得进行配置&#xff01;&#xff01;&#xff01; spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncodingutf8&useSSLfalseusername: rootpassword:…

深入解析Oracle数据库中的外连接 (OUTER JOIN)

在Oracle数据库中&#xff0c;外连接用于从两个或更多表的连接操作中检索那些在至少一个表中有匹配记录的所有记录。外连接可以确保即使在另一个表中找不到匹配项&#xff0c;指定表中的记录也会出现在结果集中。外连接主要有三种类型&#xff1a; 左外连接 (LEFT OUTER JOIN)&…

sql server用nest typeorm实现索引的方式

针对您提到的索引类型&#xff0c;下面是使用TypeORM库在SQL Server中实现不同类型的索引的代码示例&#xff1a; 普通索引&#xff1a; import { Entity, Column, Index } from typeorm;Entity() Index(idx_name, [name]) export class User {Column()name: string;Column()…

JavaScript快速入门笔记之一(基本概念)

JavaScript快速入门笔记之一&#xff08;基本概念&#xff09; 前端三大语言&#xff1a; HTML&#xff1a;专门编写网页内容的语言CSS&#xff1a;专门美化网页样式的语言JavaScript&#xff1a;专门编写网页交互的语言 名词解释&#xff1a; 交互&#xff1a;输入数据&#…

C++ MFC 只启动一个程序实例 唤醒之前的实例(完整源码)

初级代码游戏的专栏介绍与文章目录-CSDN博客 很多时候我们希望只允许启动一个程序实例&#xff0c;如果再次运行&#xff0c;就唤醒之前的实例。 目录 1 概述 2 相关技术介绍 2.1 互斥对象 2.2 查找窗口 2.3 唤醒窗口 1 概述 技术上并不难&#xff0c;涉及到以下几个技术…

用redis lua脚本实现时间窗分布式限流

需求背景&#xff1a; 限制某sql在30秒内最多只能执行3次 需求分析 微服务分布式部署&#xff0c;既然是分布式限流&#xff0c;首先自然就想到了结合redis的zset数据结构来实现。 分析对zset的操作&#xff0c;有几个步骤&#xff0c;首先&#xff0c;判断zset中符合rangeS…

Java服务器开发的日志:日志的作用和使用方法;日志文件的定期归档、清理和滚动策略;ELK(又称Elastic Stack)

Java服务器开发的日志 Java服务器开发&#xff0c;为什么要使用日志&#xff1f; 应该怎样使用日志&#xff1f; 在Java服务器开发中使用日志是非常关键的一个实践&#xff0c;原因如下&#xff1a; 本文所说的“日志”&#xff0c;主要是指程序运行时生成的技术日志&#xff…

#AngularJS#$sce.trustAsResourceUrl

$sce.trustAsResourceUrl 是 AngularJS&#xff08;一个旧版本的 Angular&#xff09;中的安全上下文&#xff08;Security Context&#xff09;方法&#xff0c;用于信任一个 URL&#xff0c;使其可以作为资源 URL 使用&#xff0c;而不会触发 AngularJS 的安全警告或阻止。 …

使用JMeter进行梯度压测

使用JMeter进行梯度压测 梯度压测配置如下&#xff1a; 使用线程:5&#xff0c;然后循环5000次&#xff0c;共2.5万个样本使用线程:10&#xff0c;然后循环5000次&#xff0c;共5万个样本使用线程:15&#xff0c;然后循环5000次&#xff0c;共7.5万个样本使用线程:20&#xff…

Redis中的事件

事件 概述 Redis服务器是一个事件驱动程序:服务器需要处理以下两类事件: 1.文件事件(file event):Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接&#xff0c;而文件事件就是服务器对套接字操作的抽象。服务器与客户端(或者其他服务器)的通信会产生相应的文件…

上位机图像处理和嵌入式模块部署(qmacvisual自定义插件代码分析)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 qmacvisual里面的第三方插件主要由两部分组成&#xff0c;一部分是ExtensionLibrary&#xff0c;也就是插件的容器&#xff0c;这个是官方提供的&a…