版本:NX11+VS2013+MySQL5.6(x64)+SQLyog

1.新建一个NX项目(多字节)

2.设置VC++目录(调用MySQL的头文件,dll和lib库文件)

3.设置番茄助手

然后重启VS

3.源代码(发布:程序运行时需要libmysql.dll,此DLL要随程序一同发布)

 //DataBaseTest

 // Mandatory UF Includes
#include <uf.h>
#include <uf_object_types.h> // Internal Includes
#include <NXOpen/ListingWindow.hxx>
#include <NXOpen/NXMessageBox.hxx>
#include <NXOpen/UI.hxx> // Internal+External Includes
#include <NXOpen/Annotations.hxx>
#include <NXOpen/Assemblies_Component.hxx>
#include <NXOpen/Assemblies_ComponentAssembly.hxx>
#include <NXOpen/Body.hxx>
#include <NXOpen/BodyCollection.hxx>
#include <NXOpen/Face.hxx>
#include <NXOpen/Line.hxx>
#include <NXOpen/NXException.hxx>
#include <NXOpen/NXObject.hxx>
#include <NXOpen/Part.hxx>
#include <NXOpen/PartCollection.hxx>
#include <NXOpen/Session.hxx> #include <uf.h>
#include <uf_ui.h> //头文件
#include <stdio.h>
#include <stdlib.h>
//MySQL support on Windows
#include <WinSock2.h>
#include <mysql.h>
#pragma comment(lib,"libmysql") // Std C++ Includes
#include <iostream>
#include <sstream> using namespace NXOpen;
using std::string;
using std::exception;
using std::stringstream;
using std::endl;
using std::cout;
using std::cerr; //------------------------------------------------------------------------------
// NXOpen c++ test class
//------------------------------------------------------------------------------
class MyClass
{
// class members
public:
static Session *theSession;
static UI *theUI; MyClass();
~MyClass(); void do_it();
void print(const NXString &);
void print(const string &);
void print(const char*); private:
Part *workPart, *displayPart;
NXMessageBox *mb;
ListingWindow *lw;
LogFile *lf;
}; //------------------------------------------------------------------------------
// Initialize static variables
//------------------------------------------------------------------------------
Session *(MyClass::theSession) = NULL;
UI *(MyClass::theUI) = NULL; //------------------------------------------------------------------------------
// Constructor
//------------------------------------------------------------------------------
MyClass::MyClass()
{ // Initialize the NX Open C++ API environment
MyClass::theSession = NXOpen::Session::GetSession();
MyClass::theUI = UI::GetUI();
mb = theUI->NXMessageBox();
lw = theSession->ListingWindow();
lf = theSession->LogFile(); workPart = theSession->Parts()->Work();
displayPart = theSession->Parts()->Display(); } //------------------------------------------------------------------------------
// Destructor
//------------------------------------------------------------------------------
MyClass::~MyClass()
{
} //------------------------------------------------------------------------------
// Print string to listing window or stdout
//------------------------------------------------------------------------------
void MyClass::print(const NXString &msg)
{
if(! lw->IsOpen() ) lw->Open();
lw->WriteLine(msg);
}
void MyClass::print(const string &msg)
{
if(! lw->IsOpen() ) lw->Open();
lw->WriteLine(msg);
}
void MyClass::print(const char * msg)
{
if(! lw->IsOpen() ) lw->Open();
lw->WriteLine(msg);
} //------------------------------------------------------------------------------
// 定义结构体
//------------------------------------------------------------------------------
struct Student
{
int id;
char name[];
char birthday[];
char cellphone[];
}; //------------------------------------------------------------------------------
// 接收界面输入参数,增加一条数据
//------------------------------------------------------------------------------
int do_insert(Student* stu)
{
MYSQL conn;
mysql_init(&conn); // 连接服务器
if (NULL == mysql_real_connect(&conn,
"127.0.0.1", "root", "", "example"
, , NULL, ))
{
printf("Failed to connect to database: %s\n",
mysql_error(&conn));
return -;
} // 构造SQL语句
char sql[];
sprintf(sql,
" INSERT INTO `student` "
" (`id`, `name`, `birthday`, `cellphone`) "
" VALUES "
"('%d', '%s', '%s', '%s')"
, stu->id
, stu->name
, stu->birthday
, stu->cellphone
); // 执行SQL语句
int ret = mysql_query(&conn, sql);
if (ret != )
{
printf("error: %s \n", mysql_error(&conn));
}
else
{
my_ulonglong affected_rows = mysql_affected_rows(&conn); // a 64-bit large number
printf("%d rows affected. \n", (int)affected_rows); // cast to int
} // 关闭连接
mysql_close(&conn); return ;
} //------------------------------------------------------------------------------
// 增加一条数据
//------------------------------------------------------------------------------
int my_insert(MYSQL* conn)
{
//SQL语句的末尾不要加分号
const char* sql =
" INSERT INTO `student` "
" (`id`, `name`, `birthday`, `cellphone`) "
" VALUES "
"('17', 'qian22', '1992-12-2', '18601088987')"
; int ret = mysql_query(conn, sql);//执行SQL语句
char msg[];
if (ret != )
{
sprintf_s(msg, "error: %s\n", conn, sql);
uc1601(msg, );
return -;
}
my_ulonglong affected_rows = mysql_affected_rows(conn);//获得受影响的行数
sprintf_s(msg, "%d rows affected\n", (int)affected_rows);
uc1601(msg, ); return ;
} //------------------------------------------------------------------------------
// 查找数据
//------------------------------------------------------------------------------
int my_select(MYSQL* conn)
{
// SQL语句,末尾不加分号。每次只执行一条SQL语句。
const char* sql = "SELECT * FROM student";
int ret = mysql_query(conn, sql);
char msg[];
UF_UI_open_listing_window();
if (ret != )
{
sprintf_s(msg,"error: %s \n", mysql_error(conn));
uc1601(msg, );
return -;
} MYSQL_RES * result = mysql_store_result(conn);
if (result == NULL)
{
//printf("error(%d): %s \n", mysql_errno(conn), mysql_error(conn));
}
else
{
// how many rows
my_ulonglong num_rows = mysql_num_rows(result);
sprintf_s(msg,"got %d rows: \n", (int)num_rows);
UF_UI_write_listing_window(msg); // number of fields for each row
unsigned int num_fields = mysql_num_fields(result);
sprintf_s(msg,"number of fields: %d \n", (int)num_fields);
UF_UI_write_listing_window(msg); // fetch the rows
MYSQL_ROW row;
while ((row = mysql_fetch_row(result)))
{
unsigned long *lengths = mysql_fetch_lengths(result);
for (int i = ; i < num_fields; i++)
{
char* field = row[i]; // can be a NULL value
unsigned int field_length = lengths[i]; // the data length sprintf_s(msg," column[%d], length[%d] , data[%s] \n",
i, field_length, field ? field : "null");
UF_UI_write_listing_window(msg);
}
UF_UI_write_listing_window("\n");
} // release the memory
mysql_free_result(result);
} return ;
} //------------------------------------------------------------------------------
// Do something
//------------------------------------------------------------------------------
void MyClass::do_it()
{ // TODO: add your code here /*
//获取用户输入
Student stu;
printf("ID:");
char buf[128];
gets(buf);
stu.id = atoi(buf);
printf("Name:");
gets(stu.name);
printf("Birthday:");
gets(stu.birthday);
printf("CellPhone:");
gets(stu.cellphone);
*/ if (mysql_library_init(, NULL, NULL))//初始化
{
uc1601("could not initialize MySQL library\n", );
return;
}
//连接服务器
MYSQL conn;
mysql_init(&conn); MYSQL* ret = mysql_real_connect(&conn, "127.0.0.1", "root", "", "example", , NULL, );
if (!ret)
{
char msg[];
sprintf_s(msg, "Failed to connect to database: %s\n", mysql_error(&conn));
uc1601(msg, );
} //增加一条数据
my_insert(&conn); //查找数据
my_select(&conn); //关闭连接
mysql_close(&conn); mysql_library_end();//结束
} //------------------------------------------------------------------------------
// Entry point(s) for unmanaged internal NXOpen C/C++ programs
//------------------------------------------------------------------------------
// Explicit Execution
extern "C" DllExport void ufusr( char *parm, int *returnCode, int rlen )
{
try
{
// Create NXOpen C++ class instance
MyClass *theMyClass;
theMyClass = new MyClass();
theMyClass->do_it();
delete theMyClass;
}
catch (const NXException& e1)
{
UI::GetUI()->NXMessageBox()->Show("NXException", NXOpen::NXMessageBox::DialogTypeError, e1.Message());
}
catch (const exception& e2)
{
UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, e2.what());
}
catch (...)
{
UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, "Unknown Exception.");
}
} //------------------------------------------------------------------------------
// Unload Handler
//------------------------------------------------------------------------------
extern "C" DllExport int ufusr_ask_unload()
{
return (int)NXOpen::Session::LibraryUnloadOptionImmediately;
} Caesar卢尚宇
2020年2月12日

4.补充(出自https://chuanke.baidu.com/v4509752-209102-1284621.html C语言C++学习指南(数据库篇)MySQL与SQLite)

学习资料 https://chuanke.baidu.com/v4509752-209102-1284621.html C语言C++学习指南(数据库篇)MySQL与SQLite

MySQL https://www.mysql.com/

MySQL :: MySQL 5.6 Reference Manual :: 23.7.5 C API Function Overview https://dev.mysql.com/doc/refman/5.6/en/c-api-function-overview.html

补充

数据库不能写入中文,设置数据库字符集,// "gbk" or "utf8"

位置加到mysql_init之后,mysql_real_connect之前。

        // "gbk" or "utf8"
if (!mysql_set_character_set(&conn, "gbk"))
{
char msg[];
sprintf_s(msg, "Charset for the connection : %s\n", mysql_character_set_name(&conn));
//uc1601(msg, 1);
}

2020年4月27日

Caesar卢尚宇

NX二次开发-NX访问MySQL数据库(增删改查)的更多相关文章

  1. NX二次开发-NX访问SqlServer数据库(增删改查)C#版

    版本:NX9+VS2012+SqlServer2008r2 以前我写过一个NX访问MySQL数据库(增删改查)的文章https://www.cnblogs.com/nxopen2018/p/12297 ...

  2. MySQL数据库(增删改查语句)

    MySQL数据库(增删改查语句)一.登录数据库:---->  mysql -uroot -proot;(对应用户名和密码)二.SQL语句:    数据定义语言DDL  用来定义数据库.表.列,关 ...

  3. Java连接MySQL数据库增删改查通用方法

    版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...

  4. python操作mysql数据库增删改查的dbutils实例

    python操作mysql数据库增删改查的dbutils实例 # 数据库配置文件 # cat gconf.py #encoding=utf-8 import json # json里面的字典不能用单引 ...

  5. Asp.Net操作MySql数据库增删改查

    Asp.Net操作MySql数据库增删改查,话不多说直接步入正题.git源码地址:https://git.oschina.net/gxiaopan/NetMySql.git  1.安装MySQL数据库 ...

  6. Python实现mysql数据库增删改查

    利用python操作mysql数据库用法简单,环境配置容易,本文将实现对库增.删.改.查的简易封装!   1. 环境配置 安装第三方包  ,导入模块 mysql.connector  pip inst ...

  7. python2.7入门---操作mysql数据库增删改查

    Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口.Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: G ...

  8. 安卓版php服务器的mysql数据库增删改查简单案例

    界面: index.php文件: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...

  9. jsp-2 简单的servlet连接mysql数据库 增删改查

    连接mysql数据库的操作 有增删改查 用的包有 commons-lang3-3.5 mysql-connector-java-5.1.40-bin 但是实际上也就是 数据查询和数据处理两种 所以对数 ...

随机推荐

  1. (转载)sqlserver2008”备份集中的数据库备份与现有的XX数据库不同”解决办法

    原文链接:https://www.cnblogs.com/huangfr/archive/2012/08/09/2629687.html 因为是在另一台电脑对同名数据库做的备份,用常规方法还原,提示不 ...

  2. 前端进阶必读:《JavaScript核心技术开发解密》核心提炼二

    前言 最近读勒基本关于前端的数据<JavaScript核心技术开发解密>,<webpack从入门到进阶>...这几本书帮助到我更好的理解JS.webpack在前端技术领域中的作 ...

  3. 使用CrashHandler获取应用crash信息

      Android应用不可避免会发生crash,也称之为崩溃.发生原因可能是由于Android系统底层的bug,也可能是由于不充分的机型适配或者是糟糕的网络情况.当crash发生时,系统会kill掉正 ...

  4. SpringMVC修改视图定位

    @ 目录 什么是视图定位 修改springmvc-servlet.xml 修改IndexController 移动index.jsp 测试 什么是视图定位 如果代码写成这样,就表示跳转到页面 inde ...

  5. python基础 Day6

    python Day6 id 可以获得python的内存地址 id的举例子 a=100 print(id(a)) #140712544153072 这里就是该对象的内存地址 is 判断的是比较内存地址 ...

  6. 第六篇scrum冲刺

    一. 站立式会议 1.会议照片 2. 项目进展 团队成员 昨日完成任务 今日计划任务 吴茂平  新消息提醒功能设计 实现开发新消息提醒功能 陈忠明 歌曲批量下载压缩包 歌手收藏功能 吴尚谦  设计下载 ...

  7. 学习lammps 对in文件的一个概述性心得(转载)

    转载自:http://muchong.com/html/201411/8149677.html 写在开头:1.尽量列举了大部分(几乎)的命令2.带星号命令非常重要,大家在看mannual中命令的解释的 ...

  8. Java 接口简述

    Java 接口 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并 ...

  9. PHP学习中的一些总结(持续更新)

    文件上传部分 在前台的<form>表单中 hidden隐藏域的MAX_FILE_SIZE可以起到实质性的控制作用,即在文件上传之前就可以判断文件的大小,格式为: <form acti ...

  10. Trie详解

    Trie,又名字典树.单词查找树,可以较高效地实现统计.排序和保存大量的字符串. 顾名思义,Trie是一个树状的结构,按照树型结构来存储字符串,显然是一种以空间换时间的方法.整体上理解和实现都不会很难 ...