版本: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. AVL树旋转

    什么是AVL树? AVL树是带有平衡条件的二叉查找树,一颗AVL树首先是二叉查收树(每个节点如果有左子树或右子树,那么左子树中数据小于该节点数据,右子树数据大于该节点数据),其次,AVL树必须满足平衡 ...

  2. C++统计单词数

    [题目描述] 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数.现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在 ...

  3. 笔记:Windows Server2008R2服务安装

    Windows Server2008R2 服务安装 服务一:IIS,internet information services,互联网信息服务,微软开发的运行在Windows系统中互联网服务,提供了w ...

  4. Arraylist的源码学习

    @ 目录 ArrayList简介 ArrayList核心源码 ArrayList源码分析 System.arraycopy()和Arrays.copyOf()方法 两者联系与区别 ArrayList ...

  5. 精讲响应式WebClient第3篇-POST、DELETE、PUT方法使用

    本文是精讲响应式WebClient第3篇,前篇的blog访问地址如下: 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法 精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方 ...

  6. HTML5实战与剖析之媒体元素

    随着HTML5的到来,flash在手机端全部不能得到支持,这就使一项以flash制作的音乐播放和视频播放只能用HTML5中的媒体标签video标签和audio标签来制作了.很恰巧的是,移动端对HTML ...

  7. jQuery 事件操作

    入口函数 使用$(document).ready(()=>{})作为jQuery入口函数,与window.onload(()=>{})类似,但它不会等待图片等外部资源的加载完毕,而是在HT ...

  8. Bootstrap告警框(alert)实现弹出效果和短暂消失后上浮消失

    最近用到bootstrap的告警框时发现只有html的说明,就自己写了一个弹出告警框和弹出短暂显示后上浮消失的告警框. 直接上JS代码了,可以copy过去直接用(使用bootstrap的UI框架的情况 ...

  9. vs _ 用户代码片段 _ html模板

    自定义模板:首选项 -> 用户代码片段 - >(如果没有自己创个)html.json t : 表示缩进 n:表示换行 ----------------------------------- ...

  10. 报错:ER_NO_DEFAULT_FOR_FIELD: Field 'status' doesn't have a default value

    小白入门级错误,数据库插入数据时报错;ER_NO_DEFAULT_FOR_FIELD: Field 'status' doesn't have a default value  百度说是my.ini文 ...