如何在 .net (C#/vB.Net都可以)中使用 db.mysql.sqlparser.grt.dll

zjcxc 2016-12-23 05:18:25
背景:
最近想做一个 MySQL 语法相关的东东,需要把 SQL 语句解析出来,找到了现成的 DLL: db.mysql.sqlparser.grt.dll
这个在 MySQL 官网工具 WorkBench 中自带(工具和源代码可以在官网下载 ,源码看起来是VC的)
问题:
如何在 .net 中使用 db.mysql.sqlparser.grt.dll?
我只会 C#和 VB,所以VC源代码看不懂
直接添加引用是行不通的,在网上找到的方法是 DLLImport方法也是行不通的
https://social.msdn.microsoft.com/Forums/vstudio/en-US/4624961a-bbd7-4b19-811c-bda211d2d87c/c-dll-in-vbnet?forum=vbgeneral
Module Module1
Declare Function checkSqlSyntax Lib "c:\WorkBench\db.mysql.sqlparser.grt.dll" _
Alias "?checkSqlSyntax@MysqlSqlFacadeImpl@@UEAAHAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z" _
(ByVal sql As String) As Integer

Sub Main()
Console.WriteLine(checkSqlSyntax("select 1"))
End Sub
End Module


Alias 中的内容是通过 Dumpbin 查到的,测试调用的函数在源码这些地方看得到
-- Modules --> db.mysql.sqlparser.grt --> Header Files --> mysql_sql_facade.h
DECLARE_MODULE_FUNCTION(MysqlSqlFacadeImpl::checkSqlSyntax),
-- Modules --> db.mysql.sqlparser.grt --> Source Files --> mysql_sql_facade.cpp
int MysqlSqlFacadeImpl::checkSqlSyntax(const std::string &sql)
{
return Mysql_sql_syntax_check::create(get_grt())->check_sql(sql.c_str());
}

我的调用报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏
...全文
545 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2017-01-10
  • 打赏
  • 举报
回复
看起来很不完善的样子,这样简单的都有问题 create table tb(a datetime(3));
zjcxc 2017-01-09
  • 打赏
  • 举报
回复
多谢,我先试用一下 用 db.mysql.sqlparser.grt.dl,主要是考虑到是官方版本,更新和准确性能够得到保障
Tiger_Zhao 2017-01-05
  • 打赏
  • 举报
回复
发现一个通用工具 General SQL Parser .NET Version
如果只解析语法,不一定非要用 db.mysql.sqlparser.grt.dll 吧。
zjcxc 2017-01-04
  • 打赏
  • 举报
回复
没人知道,也来个人踩一下啊。。。。。。。。。。。。。
zjcxc 2016-12-23
  • 打赏
  • 举报
回复
这个东东在 WorkBench 自己的 Shell 中可以用,不管是写成插件还是直接在它的 shell 中(python脚本) 但我如果不在WorkBench中,直接启动 WorkBench 根目录下的 python.exe进入命令行,也用不到(也不知道该如何加载,python也是因为这个事才弄了一下下,不熟)

16,722

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧