003 Laura.SqlForever如何扩展 兼容更多数据库引擎

数据库引擎插件 在 界面上的体现

导航窗体 的 工具栏 中的 引擎下拉列表

       导航窗体 的 树形控件 中的 引擎主节点

       登录窗体 的 登陆面板

综上

扩展一个 数据库引擎 最终 会有三个 地方的 UI体现

而 工具栏,菜单栏,右键菜单,子节点 则有 另外的扩展 方式

具体代码

 

代码详解

以上图代码为例:

特性 中: Caption 将在 界面展示 时 显示的文本

Key     程序内部 处理时 的键值(不区分大小写)

DbEngineType       当前引擎的类型(和 当前类名 保持一致)

Image     数据库引擎 图标(不指定 其实也没有关系)

数据类型转换接口:

>这里就不列出 接口需要实现 的函数,只顺带说说 这个接口存在的思想:

>Laura.SqlForever 能够实现 跨数据库 的 结构迁移 数据迁移;

>但是 不同的数据库引擎 数据类型 各不相同;

>于是 Laura.SqlForever 实现了 统一类型:所有 数据库类型 和 统一类型 的 互转 是跨数据库类型的核心思想;

操作数据库结构接口:

>包括 读取 数据库 库结构,表结构  &  创建 数据库 库结构,表结构;

登陆面板获取函数 GetLoginPanel():

>该函数 将 返回一个 UI控件,这个 控件最终 被显示 到 登录窗体中;

创建主数据库节点函数 CreateDataEngineNode():

>该函数 将 返回一个 TreeNode控件,这个 主节点具体的子节点 Laura.SqlForever 不予干涉;

数据库引擎 树形节点 扩展

Laura.SqlForever 对 树形控件 主引擎的节点 其实不予干涉 —— 开发者 有 自己的自由;

但是 Laura.SqlForever 对 树形控件 的 节点扩展 也提供了 额外封装:

>以简化 扩展代码 的复杂度

>封装 多线程,在节点 展开时 才 异步获取数据,改善用于体验

>具体 是 DbTreeNode 和 DbFolderTreeNode 两个 基类

具体代码

代码 就 不予详解

>上面 IDataTableFolderNode 只是一个 标记接口(没有任何 函数),加上 这个接口 的节点 将具备 Laura.SqlForever 内置 的 右键菜单项 “新建表(N) …”;

>不继承 IDataTableFolderNode 也不会影响 程序运行,只不过 这个节点 将失去一个 右键菜单项 而已 —— 而你,可以选择 不使用 内置的右键菜单,自己扩展 右键菜单项;

>    

这里的 “新建表(N)…”是 内置右键菜单项 (只针对 IDataTableFolderNode 节点)

这里的 “刷新(F)”是 内置的右键菜单项(针对 任何 节点)

Ps.   具体更多 详细信息,可以参见 Laura.SqlForever 的详细源码

Laura.SqlForever 完全开源,任何 企业或个人 都可以 剪切,复制,删除,更改 Laura.SqlForever 的任何代码片段。

舒小龙

2014-02-12 16:38

『练手』003 Laura.SqlForever如何扩展 兼容更多数据库引擎的更多相关文章

  1. 『练手』004 Laura.SqlForever如何扩展 导航栏 工具栏 右键菜单 插件

    004 Laura.SqlForever如何扩展 导航栏 工具栏 右键菜单 插件 导航栏 插件扩展 比如下图的    窗口 > 关闭所有文档    这个导航栏: 在 任何程序集,任何命名空间,任 ...

  2. 『练手』005 Laura.SqlForever历史遗留 的 架构思想缺陷

    005 Laura.SqlForever历史遗留 的 架构思想缺陷 我们 比较一下 Laura.WinFramework 和 Laura.XtraFramework 的差异: Laura.WinFra ...

  3. 『练手』001 Laura.SqlForever架构基础(Laura.XtraFramework 的变迁)

    001 Laura.SqlForever架构的基础(Laura.XtraFramework 的变迁之路) Laura.XtraFramework 到底是 做什么的? Laura.XtraFramewo ...

  4. 『练手』手写一个独立Json算法 JsonHelper

    背景: > 一直使用 Newtonsoft.Json.dll 也算挺稳定的. > 但这个框架也挺闹心的: > 1.影响编译失败:https://www.cnblogs.com/zih ...

  5. 『练手』通过注册表 获取 VS 和 SQLServer 文件路径

    获取任意 VS 和 SQLServer 的 磁盘安装目录. 背景需求:如果磁盘电脑安装了 VS 或者 SQLServer 则 认定这台计算机 的使用者 是一名 软件研发人员,则让程序 以最高权限运行. ...

  6. 『集群』003 Slithice 最简分布式(多个客户端,一个独立服务端)

    Slithice 最简分布式(多个客户端,一个独立服务端) 案例Demo 展示: 我们搭建一个 可以 独立运行 的 服务端:然后 多个客户端 并发链接 这个 服务端 完成 分布式逻辑: 服务器 独立运 ...

  7. 『开源』仿SQLServer山寨一个 跨数据库客户端

    002 Laura.SqlForever项目简单介绍 相关文章 <『练手』001 Laura.SqlForever架构基础(Laura.XtraFramework 的变迁)> <『练 ...

  8. [日推荐] 『闲聊助手』人工智能小程序,仅此一款!-极乐商店store.dreawer.com

    肾phone的siri有用过吗?小编无聊时就撩一下她!但有个问题就是要是没有肾phone在身边怎么撩???现在有伙伴@wx_Volcano_Li76 开发一款小程序,可以等同于siri,想什么时候撩就 ...

  9. 关于『进击的Markdown』:第三弹

    关于『进击的Markdown』:第三弹 建议缩放90%食用 我与神明画押,赌这弹markdown又双叒叕拖稿了 %%%Markdown!我的CSDN编辑器崩了呜呜呜 各路英雄豪杰,大家好!  我们要开 ...

随机推荐

  1. 关于bash

    Linux中有一位名叫"巴士"的tool.他是如何出世的呢?原来,他是一个为GNU计划(GNU计划,又称革奴计划,是由Richard Stallman在1983年9月27日公开发起 ...

  2. 删除外部dwg中指定的块定义

    本例实现删除外部图纸中指定的块定义,在外部图纸当前模型空间中是没有该块定义的块参照存在. 代码如下: void CBlockUtil::DeleteBlockDefFormOtherDwg(const ...

  3. BZOJ_1180_[CROATIAN2009]OTOCI_LCT

    BZOJ_1180_[CROATIAN2009]OTOCI_LCT Description 给出n个结点以及每个点初始时对应的权值wi.起始时点与点之间没有连边.有3类操作:  1.bridge A ...

  4. 种树 BZOJ2151 模拟费用流

    分析: 我们如果选择点i,那么我们不能选择i-1和i+1,如果没有这个限制,直接贪心就可行,而加上这个限制,我们考虑同样贪心,每次选择i后,将点i-1,i+1从双向链表中删除,并且将-a[i]+a[i ...

  5. 大数据技术之_19_Spark学习_03_Spark SQL 应用解析 + Spark SQL 概述、解析 、数据源、实战 + 执行 Spark SQL 查询 + JDBC/ODBC 服务器

    第1章 Spark SQL 概述1.1 什么是 Spark SQL1.2 RDD vs DataFrames vs DataSet1.2.1 RDD1.2.2 DataFrame1.2.3 DataS ...

  6. C# 高性能 TCP 服务的多种实现方式

    哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C# 编写 TCP 服务的花样姿势!>. 本篇文 ...

  7. centos7开放端口和防火墙设置

    centos7开放端口和防火墙设置. 查看防火墙状态: firewall-cmd --state 如果显示: not running 打开防火墙服务: systemctl start firewall ...

  8. HashMap?面试?我是谁?我在哪

    现在是晚上11点了,学校屠猪馆的自习室因为太晚要关闭了,勤奋且疲惫的小鲁班也从屠猪馆出来了,正准备回宿舍洗洗睡,由于自习室位置比较偏僻所以是接收不到手机网络信号的,因此小鲁班从兜里掏出手机的时候,信息 ...

  9. redis的bigkey扫描脚本

    众所周知,redis里面的大key存在是非常危险的一件事情.因为最近的工作转移到中间件相关的工作,因此关注了一下bigkey的扫描方法.首先介绍一下阿里云提供的扫描脚本: 具体可见:https://y ...

  10. 强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)

    在强化学习(十七) 基于模型的强化学习与Dyna算法框架中,我们讨论基于模型的强化学习方法的基本思路,以及集合基于模型与不基于模型的强化学习框架Dyna.本文我们讨论另一种非常流行的集合基于模型与不基 ...