版本: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. SpringBoot---关于 WebMvcConfigurerAdapter 过时问题及解决方法

    SpringBoot---关于 WebMvcConfigurerAdapter 过时问题及解决方法 环境: IDEA :2020.1 Maven:3.5.6 SpringBoot: 2.3.2 在Sp ...

  2. 旧 WCF 项目成功迁移到 asp.net core web api

    背景 接上一篇,放弃了 asp.net core + gRPC 的方案后,我灵光一闪,为什么不用 web api 呢?不也是 asp.net core 的吗?虽然 RESTful 不是强约束,客户端写 ...

  3. 通过C#实现OPC-UA服务端(二)

    前言 通过我前面的一篇文件,我们已经能够搭建一个OPC-UA服务端了,并且也拥有了一些基础功能.这一次咱们就来了解一下OPC-UA的服务注册与发现,如果对服务注册与发现这个概念不理解的朋友,可以先百度 ...

  4. Android ScrollView嵌套ViewPager,嵌套的ViewPager无法显示

    记录:ScrollView嵌套ViewPager,嵌套的ViewPager无法显示 项目中所需要布局:LinearLayout中包含(orientation="vertical") ...

  5. 《Head First 设计模式》:适配器模式

    正文 一.定义 适配器模式将一个类的接口(被适配者),转换成客户期望的另一个接口.适配器让原本接口不兼容的类可以合作无间. 要点: 适配器实现了目标接口,并持有被适配者的实例. 适配器使用被适配者的方 ...

  6. centos7下的redis集群模式

    1.先安装好单机版的redis 2.Reids安装包里有个集群工具,要复制到/usr/local/bin里去 cd /home/redis/redis-4.0./src ls - cp redis-t ...

  7. Antd cracoTs Js 配置流程

    JS:文档:0.1.4 配置 js 环境.note链接:http://note.youdao.com/noteshare?id=e32fa75c1baa014b5819fa5e22887dbc& ...

  8. Watchtower - 自动更新 Docker 镜像与容器

    git 地址:https://github.com/containrrr/watchtower Docker images docker pull containrrr/watchtower:i386 ...

  9. df卡死和fork:cannot allocate memory报错

    早上到了公司,发现docker资源池的某一台主机根文件系统写满. 检查后发现该主机/data目录未挂载文件系统,直接放在了根目录下.于是联系业务方将应用迁移,联系主机工程师为/data挂载80G的存储 ...

  10. java进阶(10)--String(StringBuff、StringBuilder)

    一.基本概念 1.String为引用数据类型,使用双引号 2.字符串数组存储在方法区的内存池,因为开发过程种使用过于频繁 3.String类已经重写了equals,比较时使用,同时也重写了toStri ...