NCodeGenerate 支持多种数据库,目前系统支持 MySql,SqlServer ,Oracle 。 MySql和SqlServer 是系统自带的。Oracle 数据库的支持是有博友 @查小广提供的,非常感谢。
NCodeGenerate 对各种数据库的支持是通过插件动态加载的。各种数据库的支持放在程序目录下的子目录 SchemaProviders 下面。
要实现对其他数据库的支持很简单。只要实现两个接口就可以了。这两个接口是:IDbSchemaProvider,IDbConnectionStringEditor。
第一个接口 IDbSchemaProvider 只要提供获取数据库结构的能力,是必须实现的。
using System;
using System.Data;
namespace NCodeGenerate.DBSchema
{
/// <summary>
/// IDbSchemaProvider
/// </summary>
public interface IDbSchemaProvider
{
/// <summary>
/// 名称
/// </summary>
string Name
{
get;
}
/// <summary>
/// 描述
/// </summary>
string Description
{
get;
}
/// <summary>
/// 获取数据库名称
/// </summary>
/// <param name="connectionString">connectionString</param>
/// <returns>数据库名称</returns>
string GetDatabaseName(string connectionString);
/// <summary>
/// 获取数据库扩展属性
/// </summary>
/// <param name="connectionString">connectionString</param>
/// <param name="schemaObject">schemaObject</param>
/// <returns>扩展属性数组</returns>
ExtendedProperty[] GetExtendedProperties(string connectionString, SchemaObjectBase schemaObject);
/// <summary>
/// 设置扩展属性
/// </summary>
/// <param name="connectionString">connectionString</param>
/// <param name="schemaObject">schemaObject</param>
void SetExtendedProperties(string connectionString, SchemaObjectBase schemaObject);
/// <summary>
/// 获取表结构数组
/// </summary>
/// <param name="connectionString">connectionString</param>
/// <param name="database">database</param>
/// <returns>表结构数组</returns>
TableSchema[] GetTables(string connectionString, DatabaseSchema database);
/// <summary>
/// 获取表列数组
/// </summary>
/// <param name="connectionString">connectionString</param>
/// <param name="table">table</param>
/// <returns>表列数组</returns>
ColumnSchema[] GetTableColumns(string connectionString, TableSchema table);
/// <summary>
/// 获取视图结构数组
/// </summary>
/// <param name="connectionString">connectionString</param>
/// <param name="database">database</param>
/// <returns>视图结构数组</returns>
ViewSchema[] GetViews(string connectionString, DatabaseSchema database);
/// <summary>
/// 获取视图列数组
/// </summary>
/// <param name="connectionString">connectionString</param>
/// <param name="view">view</param>
/// <returns>视图列数组</returns>
ViewColumnSchema[] GetViewColumns(string connectionString, ViewSchema view);
/// <summary>
/// 获取视图文本
/// </summary>
/// <param name="connectionString">connectionString</param>
/// <param name="view">view</param>
/// <returns>视图文本</returns>
string GetViewText(string connectionString, ViewSchema view);
/// <summary>
/// 获取表主键
/// </summary>
/// <param name="connectionString">connectionString</param>
/// <param name="table">table</param>
/// <returns>表主键</returns>
PrimaryKeySchema GetTablePrimaryKey(string connectionString, TableSchema table);
/// <summary>
/// 获取表键数组
/// </summary>
/// <param name="connectionString">connectionString</param>
/// <param name="table">table</param>
/// <returns>表键数组</returns>
TableKeySchema[] GetTableKeys(string connectionString, TableSchema table);
/// <summary>
/// 获取索引数组
/// </summary>
/// <param name="connectionString">connectionString</param>
/// <param name="table">table</param>
/// <returns>索引数组</returns>
IndexSchema[] GetTableIndexes(string connectionString, TableSchema table);
/// <summary>
/// 获取表数据
/// </summary>
/// <param name="connectionString">connectionString</param>
/// <param name="table">table</param>
/// <returns>表数据</returns>
DataTable GetTableData(string connectionString, TableSchema table);
/// <summary>
/// 获取视图数据
/// </summary>
/// <param name="connectionString">connectionString</param>
/// <param name="view">view</param>
/// <returns>视图数据</returns>
DataTable GetViewData(string connectionString, ViewSchema view);
/// <summary>
/// 获取命令数组
/// </summary>
/// <param name="connectionString">connectionString</param>
/// <param name="database">database</param>
/// <returns>命令数组</returns>
CommandSchema[] GetCommands(string connectionString, DatabaseSchema database);
/// <summary>
/// 获取命令参数数组
/// </summary>
/// <param name="connectionString">connectionString</param>
/// <param name="command">command</param>
/// <returns>命令参数数组</returns>
ParameterSchema[] GetCommandParameters(string connectionString, CommandSchema command);
/// <summary>
/// 获取命令文本
/// </summary>
/// <param name="connectionString">connectionString</param>
/// <param name="command">command</param>
/// <returns>命令文本</returns>
string GetCommandText(string connectionString, CommandSchema command);
/// <summary>
/// 获取命令结果数组
/// </summary>
/// <param name="connectionString">connectionString</param>
/// <param name="command">command</param>
/// <returns>命令结果数组</returns>
CommandResultSchema[] GetCommandResultSchemas(string connectionString, CommandSchema command);
/// <summary>
/// 测试连接
/// </summary>
/// <param name="ConnectionString">ConnectionString</param>
/// <param name="Error">错误文本</param>
/// <returns>bool</returns>
bool TestConnection(string ConnectionString,out string Error);
}
}
第二个接口 IDbConnectionStringEditor ,给NCodeGenerate 提供一个编辑连接字符串的功能。
using System;
namespace NCodeGenerate.DBSchema
{
public interface IDbConnectionStringEditor
{
string ConnectionString
{
get;
}
bool EditorAvailable
{
get;
}
bool ShowEditor(string currentConnectionString);
}
}
这个接口非常简单,只有两个属性,一个方法需要实现。
ConnectionString 返回编辑好的连接字符串。 EditorAvailable 返回是否实现了编辑界面 ,如果实现了返回 true,就可以了。 ShowEditor,传入 连接字符串,调用编辑界面,如果编辑界面点击确定就返回 true,否则返回 false。
下面附上 MySql 的实现供大家参考,也欢迎网友实现其他的数据库。
下载地址为:http://download.csdn.net/detail/ncodegenerate/4958237