代码生成利器-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 系列文章: