代码生成利器-NCodeGenerate 教程(5) 多种数据库的支持

  NCodeGenerate 支持多种数据库,目前系统支持 MySql,SqlServer ,Oracle 。 MySql和SqlServer 是系统自带的。Oracle 数据库的支持是有博友 @查小广 提供的,非常感谢。

  NCodeGenerate 对各种数据库的支持是通过插件动态加载的。各种数据库的支持放在程序目录下的子目录 SchemaProviders 下面。

  要实现对其他数据库的支持很简单。只要实现两个接口就可以了。这两个接口是:IDbSchemaProvider,IDbConnectionStringEditor。

     第一个接口 IDbSchemaProvider 只要提供获取数据库结构的能力,是必须实现的。

  1 using System;
  2 using System.Data;
  3 namespace NCodeGenerate.DBSchema
  4 {
  5     /// <summary>
  6     /// IDbSchemaProvider
  7     /// </summary>
  8     public interface IDbSchemaProvider
  9     {
 10         /// <summary>
 11         /// 名称
 12         /// </summary>
 13         string Name
 14         {
 15             get;
 16         }
 17         /// <summary>
 18         /// 描述
 19         /// </summary>
 20         string Description
 21         {
 22             get;
 23         }
 24         /// <summary>
 25         /// 获取数据库名称
 26         /// </summary>
 27         /// <param name="connectionString">connectionString</param>
 28         /// <returns>数据库名称</returns>
 29         string GetDatabaseName(string connectionString);
 30         /// <summary>
 31         /// 获取数据库扩展属性
 32         /// </summary>
 33         /// <param name="connectionString">connectionString</param>
 34         /// <param name="schemaObject">schemaObject</param>
 35         /// <returns>扩展属性数组</returns>
 36         ExtendedProperty[] GetExtendedProperties(string connectionString, SchemaObjectBase schemaObject);
 37         /// <summary>
 38         /// 设置扩展属性
 39         /// </summary>
 40         /// <param name="connectionString">connectionString</param>
 41         /// <param name="schemaObject">schemaObject</param>
 42         void SetExtendedProperties(string connectionString, SchemaObjectBase schemaObject);
 43         /// <summary>
 44         /// 获取表结构数组
 45         /// </summary>
 46         /// <param name="connectionString">connectionString</param>
 47         /// <param name="database">database</param>
 48         /// <returns>表结构数组</returns>
 49         TableSchema[] GetTables(string connectionString, DatabaseSchema database);
 50         /// <summary>
 51         /// 获取表列数组
 52         /// </summary>
 53         /// <param name="connectionString">connectionString</param>
 54         /// <param name="table">table</param>
 55         /// <returns>表列数组</returns>
 56         ColumnSchema[] GetTableColumns(string connectionString, TableSchema table);
 57         /// <summary>
 58         /// 获取视图结构数组
 59         /// </summary>
 60         /// <param name="connectionString">connectionString</param>
 61         /// <param name="database">database</param>
 62         /// <returns>视图结构数组</returns>
 63         ViewSchema[] GetViews(string connectionString, DatabaseSchema database);
 64         /// <summary>
 65         /// 获取视图列数组
 66         /// </summary>
 67         /// <param name="connectionString">connectionString</param>
 68         /// <param name="view">view</param>
 69         /// <returns>视图列数组</returns>
 70         ViewColumnSchema[] GetViewColumns(string connectionString, ViewSchema view);
 71         /// <summary>
 72         /// 获取视图文本
 73         /// </summary>
 74         /// <param name="connectionString">connectionString</param>
 75         /// <param name="view">view</param>
 76         /// <returns>视图文本</returns>
 77         string GetViewText(string connectionString, ViewSchema view);
 78         /// <summary>
 79         /// 获取表主键
 80         /// </summary>
 81         /// <param name="connectionString">connectionString</param>
 82         /// <param name="table">table</param>
 83         /// <returns>表主键</returns>
 84         PrimaryKeySchema GetTablePrimaryKey(string connectionString, TableSchema table);
 85         /// <summary>
 86         /// 获取表键数组
 87         /// </summary>
 88         /// <param name="connectionString">connectionString</param>
 89         /// <param name="table">table</param>
 90         /// <returns>表键数组</returns>
 91         TableKeySchema[] GetTableKeys(string connectionString, TableSchema table);
 92         /// <summary>
 93         /// 获取索引数组
 94         /// </summary>
 95         /// <param name="connectionString">connectionString</param>
 96         /// <param name="table">table</param>
 97         /// <returns>索引数组</returns>
 98         IndexSchema[] GetTableIndexes(string connectionString, TableSchema table);
 99         /// <summary>
100         /// 获取表数据
101         /// </summary>
102         /// <param name="connectionString">connectionString</param>
103         /// <param name="table">table</param>
104         /// <returns>表数据</returns>
105         DataTable GetTableData(string connectionString, TableSchema table);
106         /// <summary>
107         /// 获取视图数据
108         /// </summary>
109         /// <param name="connectionString">connectionString</param>
110         /// <param name="view">view</param>
111         /// <returns>视图数据</returns>
112         DataTable GetViewData(string connectionString, ViewSchema view);
113         /// <summary>
114         /// 获取命令数组
115         /// </summary>
116         /// <param name="connectionString">connectionString</param>
117         /// <param name="database">database</param>
118         /// <returns>命令数组</returns>
119         CommandSchema[] GetCommands(string connectionString, DatabaseSchema database);
120         /// <summary>
121         /// 获取命令参数数组
122         /// </summary>
123         /// <param name="connectionString">connectionString</param>
124         /// <param name="command">command</param>
125         /// <returns>命令参数数组</returns>
126         ParameterSchema[] GetCommandParameters(string connectionString, CommandSchema command);
127         /// <summary>
128         /// 获取命令文本
129         /// </summary>
130         /// <param name="connectionString">connectionString</param>
131         /// <param name="command">command</param>
132         /// <returns>命令文本</returns>
133         string GetCommandText(string connectionString, CommandSchema command);
134         /// <summary>
135         /// 获取命令结果数组
136         /// </summary>
137         /// <param name="connectionString">connectionString</param>
138         /// <param name="command">command</param>
139         /// <returns>命令结果数组</returns>
140         CommandResultSchema[] GetCommandResultSchemas(string connectionString, CommandSchema command);
141         /// <summary>
142         /// 测试连接
143         /// </summary>
144         /// <param name="ConnectionString">ConnectionString</param>
145         /// <param name="Error">错误文本</param>
146         /// <returns>bool</returns>
147         bool TestConnection(string ConnectionString,out string Error);
148     }
149 }

第二个接口  IDbConnectionStringEditor ,给NCodeGenerate 提供一个编辑连接字符串的功能。

 1 using System;
 2 namespace NCodeGenerate.DBSchema
 3 {
 4     public interface IDbConnectionStringEditor
 5     {
 6         string ConnectionString
 7         {
 8             get;
 9         }
10         bool EditorAvailable
11         {
12             get;
13         }
14         bool ShowEditor(string currentConnectionString);
15     }
16 }

这个接口非常简单,只有两个属性,一个方法需要实现。

ConnectionString 返回编辑好的连接字符串。 EditorAvailable 返回是否实现了编辑界面 ,如果实现了返回 true,就可以了。 ShowEditor,传入 连接字符串,调用编辑界面,如果编辑界面点击确定就返回 true,否则返回 false。

 下面附上 MySql 的实现供大家参考,也欢迎网友实现其他的数据库。

下载地址为: https://files.cnblogs.com/NCodeGenerate/MySqlSchema.zip

 

附: NCodeGenerate 新增了  NCodeGenerate.DBSchema 的文档,在下面的文档连接中。

附上下载地址:

NCodeGenerate.zip

文档:文档

 

NCodeGenerate 系列文章:

一、代码生成利器-NCodeGenerate 是什么?

二、代码生成利器-NCodeGenerate 教程(1) 遍历数据库内的所有表

三、代码生成利器-NCodeGenerate 教程(2) NCodeGenerate的代码公用之一

四、代码生成利器-NCodeGenerate 教程(3) 生成代码到文件.

五、代码生成利器-NCodeGenerate 教程(4) CodeSmith模板转换

六、代码生成利器-NCodeGenerate 教程(5) 多种数据库的支持

七、代码生成利器-NCodeGenerate 教程(6) 调试功能 NTrace 输出

八、代码生成利器-NCodeGenerate 教程(7) 揭开调试功能 的神秘面纱

九、代码生成利器-NCodeGenerate 教程(8) 揭开Razor模板引擎的神秘面纱

十、代码生成利器-NCodeGenerate 教程(9) 数据类型映射Map功能

posted @ 2013-01-04 16:01  NCodeGenerate  阅读(1972)  评论(3编辑  收藏  举报