.net项目开发工具接口说明
.net项目开发工具的主体功能由三个基本的接口构成:数据访问接口、生成SQL的接口和生成主程序代码的接口。
一。数据访问接口。
提供数据库访问的一系列功能接口(位于项目IDAL中),具体如下:
数据访问接口
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using Hxw.DE.Model;
namespace Hxw.DE.IDAL
{
/**//// <summary>
/// 数据访问接口。
/// </summary>
public interface IDataaccess
{
/**//// <summary>
/// 获取当前连接的数据库名称。
/// </summary>
string CurrentDatabase { get;}
/**//// <summary>
/// 获取当前数据库访问角色。
/// </summary>
string DatabaseOwner { get;}
/**//// <summary>
/// 数据库连接测试。
/// </summary>
/// <param name="connString">数据库连接字符串</param>
/// <returns>返回连接成功与否(true为成功;false为不成功)</returns>
bool DBConnect(string connString);
/**//// <summary>
/// 判断数据库中某个对象是否存在。
/// </summary>
/// <param name="_object">对象名称</param>
/// <returns>返回对象是否存在(true为存在;false为不存在)</returns>
bool OjbectIsExists(string _object);
/**//// <summary>
/// 获取当前数据库中的所有数据表。
/// </summary>
/// <remarks>
/// DataSet中DataTable需要获取的列:name(数据表名称),id(数据表ID)
/// </remarks>
/// <example>
/// select name,id from
/// </example>
/// <returns>TablesBUSEntity实体对象</returns>
DataSet GetTables();
/**//// <summary>
/// 获取数据表说明。
/// </summary>
/// <param name="table">指定的数据表</param>
/// <remarks>
/// 1.如果table为空,则获取当前数据库中所有数据表的说明。
/// </remarks>
/// <returns>数据表说明泛型集合</returns>
List<string> GetTableDescription(string table);
/**//// <summary>
/// 获取与指定的数据表相关的存储过程或根据关键字搜索存储过程。
/// </summary>
/// <param name="table">数据表</param>
/// <param name="keywords">搜索关键字</param>
/// <remarks>
/// 1.如果table参数不为空,则获取与当前数据表相关的存储过程(即当前存储过程名称包括表名称,如:%表名%)。
/// 2.如果table参数为空,则获取当前数据库中的所有存储过程;
/// 3.如果keywords参数不为空,则从获取的存储过程的名称或存储过程内容中匹配关键字。
/// DataSet中DataTable需要获取的列:name(存储过程名称),id(存储过程ID)
/// </remarks>
/// <example>
/// select name,id from
/// </example>
/// <returns>DataSet对象</returns>
DataSet GetProcedures(string table, string keywords);
/**//// <summary>
/// 获取指定的数据表的所有相关信息。
/// </summary>
/// <param name="table">数据表</param>
/// <remarks>
/// 此DataSet由三个数据表构成:
/// 1.数据列相关信息表,需要获取的列:name(列名称),colid(列ID),columnid(列在表中的编号),isnullable(列是否允许为空),types(列数据类型),length(列数据长度),defaultValue(列默认值),columnRemark(列说明),Precisionvalue(列精度值),Decimaldigitvalue(列小数位数)
/// 2.当前数据表的所有主外键表,需要获取的列: index_name(主外键名称),index_description(说明),index_keys(主外键列名称)
/// 3.自动递增表,需要获取的列: Identity(自动递增列名称),Seed(标识种子),increment(标识递增量)
/// 详情请参见DatacolumnsBUSEntity模型
/// </remarks>
/// <returns>DatacolumnsBUSEntity对象</returns>
DatacolumnsBUSEntity GetColumns(string table);
/**//// <summary>
/// 获取某一对象的所有成员。
/// </summary>
/// <param name="_obj">对象名称或对象编号</param>
/// <remarks>
/// DataSet中DataTable需要获取的列:name(成员名称),id(成员ID),types(成员数据类型),length(成员数据长度),isoutparam(存成员类型[是否为输出参数])。
/// </remarks>
/// <example>
/// select name,id,types,length,isoutparam from
/// </example>
/// <returns></returns>
DataSet GetObjectMembers(string _obj);
/**//// <summary>
/// 获取某个对象的详细内容(如存储过程内容等)。
/// </summary>
/// <param name="_object">对象名称或ID</param>
/// <returns>该对象的详细内容</returns>
string GetComments(string _object);
/**//// <summary>
/// 删除数据表。
/// </summary>
/// <param name="tableList">数据表名称泛型(即一次可删除多个数据表,需启用事务控制)</param>
void DropTable(List<string> tableList);
/**//// <summary>
/// 清空数据库日志。
/// </summary>
void ClearDBLog();
/**//// <summary>
/// 收缩数据库。
/// </summary>
void ShrinkDB();
/**//// <summary>
/// 移除存储过程。
/// </summary>
/// <param name="procedureList">存储过程名称泛型(即一次可删除多个存储过程,需启用事务控制)</param>
void DropProcedures(List<string> procedureList);
/**//// <summary>
/// 执行某段SQL脚本。
/// </summary>
/// <remarks>
/// rollback参数为ture时,是为了分析SQL代码,而不是真正执行SQL代码。
/// </remarks>
/// <param name="sqlText">sql脚本</param>
/// <param name="rollback">是否回滚操作</param>
bool ExecuteNonQuery(string sqlText, bool rollback);
/**//// <summary>
/// 执行某段SQL脚本,如果对象存在,则询问是否覆盖。
/// </summary>
/// <param name="sqlText">SQL脚本</param>
/// <param name="message">输出消息</param>
/// <param name="objectName">对象名称</param>
/// <returns>对象类型(ObjectXTypes枚举值之一)</returns>
ObjectXTypes ExecuteNonQueryConfirm(string sqlText, ref string message, ref string objectName);
/**//// <summary>
/// 执行某段SQL脚本并返回一个DataSet对象。
/// </summary>
/// <param name="sqlText">sql脚本</param>
/// <returns></returns>
DataSet ExecuteDataset(string sqlText);
/**//// <summary>
/// 执行某段SQL脚本,如果对象存在,则询问是否覆盖。
/// </summary>
/// <param name="sqlText">SQL脚本</param>
/// <param name="message">输出消息</param>
/// <param name="objectName">对象名称</param>
/// <returns>DataSet</returns>
DataSet ExecuteDatasetConfirm(string sqlText, ref string message, ref string objectName);
/**//// <summary>
/// 调试执行存储过程。
/// </summary>
/// <param name="procedure">存储过程名称</param>
/// <param name="list">当前存储过程参数泛型对象</param>
/// <returns></returns>
DataSet ExecuteProcedure(string procedure, List<ParmParameter> list);
/**//// <summary>
/// 执行某段SQL脚本(ExecuteScalar)。
/// </summary>
/// <param name="sqlText">sql脚本</param>
/// <returns></returns>
object ExecuteScalar(string sqlText);
/**//// <summary>
/// 获取当前数据库中所有自定义函数。
/// </summary>
/// <remarks>
/// DataSet中DataTable需要获取的列:name(自定义函数名称),id(自定义函数ID)
/// </remarks>
/// <example>
/// select name,id from
/// </example>
/// <returns>DataSet对象</returns>
DataSet GetFunctions();
/**//// <summary>
/// 获取当前数据库中所有视图。
/// </summary>
/// <remarks>
/// DataSet中DataTable需要获取的列:name(视图名称),id(视图ID)
/// </remarks>
/// <example>
/// select name,id from
/// </example>
/// <returns>DataSet对象</returns>
DataSet GetViews();
/**//// <summary>
/// 移除视图。
/// </summary>
/// <param name="view">将要删除的视图名称泛型</param>
void DropView(List<string> viewList);
/**//// <summary>
/// 移除自定义函数。
/// </summary>
/// <param name="view">将要删除的自定义函数名称泛型</param>
void DropFunction(List<string> functionList);
/**//// <summary>
/// 根据对象名称获取该对象的类型。
/// </summary>
/// <remarks>
/// 比如:判断是数据表、视图、存储过程或自定义数据类型等。
/// </remarks>
/// <param name="objectName">对象名称</param>
/// <returns></returns>
ObjectXTypes GetObjectXType(string objectName);
/**//// <summary>
/// 获取当前数据库类型的所有数据类型。
/// </summary>
/// <returns>数据类型泛型</returns>
DataTypeCollection GetDataTypes();
/**//// <summary>
/// 获取当前数据表的所有主、外键约束(关系)。
/// </summary>
/// <param name="table">数据表</param>
/// <remarks>
/// DataSet中DataTable需要获取的列:name(关系名称),fkeyTableName(外键表名称),rkeyTableName(主键表名称),fkeyColumnName(外键表列名称),rkeyColumnName(主键表列名称)
/// </remarks>
/// <example>
/// select name,fkeyTableName,rkeyTableName,fkeyColumnName,rkeyColumnName from
/// </example>
/// <returns></returns>
DataSet GetPrimaryConstraint(string table);
/**//// <summary>
/// 保存数据表。
/// </summary>
/// <param name="data">要保存的数据</param>
/// <param name="tableFrame">要保存的数据表的数据结构</param>
void SaveData(DataSet data, DataTable tableFrame);
/**//// <summary>
/// 载入指定数据表的所有数据。
/// </summary>
/// <param name="table">数据表</param>
/// <returns></returns>
DataSet LoadData(string table);
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using Hxw.DE.Model;
namespace Hxw.DE.IDAL
{
/**//// <summary>
/// 数据访问接口。
/// </summary>
public interface IDataaccess
{
/**//// <summary>
/// 获取当前连接的数据库名称。
/// </summary>
string CurrentDatabase { get;}
/**//// <summary>
/// 获取当前数据库访问角色。
/// </summary>
string DatabaseOwner { get;}
/**//// <summary>
/// 数据库连接测试。
/// </summary>
/// <param name="connString">数据库连接字符串</param>
/// <returns>返回连接成功与否(true为成功;false为不成功)</returns>
bool DBConnect(string connString);
/**//// <summary>
/// 判断数据库中某个对象是否存在。
/// </summary>
/// <param name="_object">对象名称</param>
/// <returns>返回对象是否存在(true为存在;false为不存在)</returns>
bool OjbectIsExists(string _object);
/**//// <summary>
/// 获取当前数据库中的所有数据表。
/// </summary>
/// <remarks>
/// DataSet中DataTable需要获取的列:name(数据表名称),id(数据表ID)
/// </remarks>
/// <example>
/// select name,id from
/// </example>
/// <returns>TablesBUSEntity实体对象</returns>
DataSet GetTables();
/**//// <summary>
/// 获取数据表说明。
/// </summary>
/// <param name="table">指定的数据表</param>
/// <remarks>
/// 1.如果table为空,则获取当前数据库中所有数据表的说明。
/// </remarks>
/// <returns>数据表说明泛型集合</returns>
List<string> GetTableDescription(string table);
/**//// <summary>
/// 获取与指定的数据表相关的存储过程或根据关键字搜索存储过程。
/// </summary>
/// <param name="table">数据表</param>
/// <param name="keywords">搜索关键字</param>
/// <remarks>
/// 1.如果table参数不为空,则获取与当前数据表相关的存储过程(即当前存储过程名称包括表名称,如:%表名%)。
/// 2.如果table参数为空,则获取当前数据库中的所有存储过程;
/// 3.如果keywords参数不为空,则从获取的存储过程的名称或存储过程内容中匹配关键字。
/// DataSet中DataTable需要获取的列:name(存储过程名称),id(存储过程ID)
/// </remarks>
/// <example>
/// select name,id from
/// </example>
/// <returns>DataSet对象</returns>
DataSet GetProcedures(string table, string keywords);
/**//// <summary>
/// 获取指定的数据表的所有相关信息。
/// </summary>
/// <param name="table">数据表</param>
/// <remarks>
/// 此DataSet由三个数据表构成:
/// 1.数据列相关信息表,需要获取的列:name(列名称),colid(列ID),columnid(列在表中的编号),isnullable(列是否允许为空),types(列数据类型),length(列数据长度),defaultValue(列默认值),columnRemark(列说明),Precisionvalue(列精度值),Decimaldigitvalue(列小数位数)
/// 2.当前数据表的所有主外键表,需要获取的列: index_name(主外键名称),index_description(说明),index_keys(主外键列名称)
/// 3.自动递增表,需要获取的列: Identity(自动递增列名称),Seed(标识种子),increment(标识递增量)
/// 详情请参见DatacolumnsBUSEntity模型
/// </remarks>
/// <returns>DatacolumnsBUSEntity对象</returns>
DatacolumnsBUSEntity GetColumns(string table);
/**//// <summary>
/// 获取某一对象的所有成员。
/// </summary>
/// <param name="_obj">对象名称或对象编号</param>
/// <remarks>
/// DataSet中DataTable需要获取的列:name(成员名称),id(成员ID),types(成员数据类型),length(成员数据长度),isoutparam(存成员类型[是否为输出参数])。
/// </remarks>
/// <example>
/// select name,id,types,length,isoutparam from
/// </example>
/// <returns></returns>
DataSet GetObjectMembers(string _obj);
/**//// <summary>
/// 获取某个对象的详细内容(如存储过程内容等)。
/// </summary>
/// <param name="_object">对象名称或ID</param>
/// <returns>该对象的详细内容</returns>
string GetComments(string _object);
/**//// <summary>
/// 删除数据表。
/// </summary>
/// <param name="tableList">数据表名称泛型(即一次可删除多个数据表,需启用事务控制)</param>
void DropTable(List<string> tableList);
/**//// <summary>
/// 清空数据库日志。
/// </summary>
void ClearDBLog();
/**//// <summary>
/// 收缩数据库。
/// </summary>
void ShrinkDB();
/**//// <summary>
/// 移除存储过程。
/// </summary>
/// <param name="procedureList">存储过程名称泛型(即一次可删除多个存储过程,需启用事务控制)</param>
void DropProcedures(List<string> procedureList);
/**//// <summary>
/// 执行某段SQL脚本。
/// </summary>
/// <remarks>
/// rollback参数为ture时,是为了分析SQL代码,而不是真正执行SQL代码。
/// </remarks>
/// <param name="sqlText">sql脚本</param>
/// <param name="rollback">是否回滚操作</param>
bool ExecuteNonQuery(string sqlText, bool rollback);
/**//// <summary>
/// 执行某段SQL脚本,如果对象存在,则询问是否覆盖。
/// </summary>
/// <param name="sqlText">SQL脚本</param>
/// <param name="message">输出消息</param>
/// <param name="objectName">对象名称</param>
/// <returns>对象类型(ObjectXTypes枚举值之一)</returns>
ObjectXTypes ExecuteNonQueryConfirm(string sqlText, ref string message, ref string objectName);
/**//// <summary>
/// 执行某段SQL脚本并返回一个DataSet对象。
/// </summary>
/// <param name="sqlText">sql脚本</param>
/// <returns></returns>
DataSet ExecuteDataset(string sqlText);
/**//// <summary>
/// 执行某段SQL脚本,如果对象存在,则询问是否覆盖。
/// </summary>
/// <param name="sqlText">SQL脚本</param>
/// <param name="message">输出消息</param>
/// <param name="objectName">对象名称</param>
/// <returns>DataSet</returns>
DataSet ExecuteDatasetConfirm(string sqlText, ref string message, ref string objectName);
/**//// <summary>
/// 调试执行存储过程。
/// </summary>
/// <param name="procedure">存储过程名称</param>
/// <param name="list">当前存储过程参数泛型对象</param>
/// <returns></returns>
DataSet ExecuteProcedure(string procedure, List<ParmParameter> list);
/**//// <summary>
/// 执行某段SQL脚本(ExecuteScalar)。
/// </summary>
/// <param name="sqlText">sql脚本</param>
/// <returns></returns>
object ExecuteScalar(string sqlText);
/**//// <summary>
/// 获取当前数据库中所有自定义函数。
/// </summary>
/// <remarks>
/// DataSet中DataTable需要获取的列:name(自定义函数名称),id(自定义函数ID)
/// </remarks>
/// <example>
/// select name,id from
/// </example>
/// <returns>DataSet对象</returns>
DataSet GetFunctions();
/**//// <summary>
/// 获取当前数据库中所有视图。
/// </summary>
/// <remarks>
/// DataSet中DataTable需要获取的列:name(视图名称),id(视图ID)
/// </remarks>
/// <example>
/// select name,id from
/// </example>
/// <returns>DataSet对象</returns>
DataSet GetViews();
/**//// <summary>
/// 移除视图。
/// </summary>
/// <param name="view">将要删除的视图名称泛型</param>
void DropView(List<string> viewList);
/**//// <summary>
/// 移除自定义函数。
/// </summary>
/// <param name="view">将要删除的自定义函数名称泛型</param>
void DropFunction(List<string> functionList);
/**//// <summary>
/// 根据对象名称获取该对象的类型。
/// </summary>
/// <remarks>
/// 比如:判断是数据表、视图、存储过程或自定义数据类型等。
/// </remarks>
/// <param name="objectName">对象名称</param>
/// <returns></returns>
ObjectXTypes GetObjectXType(string objectName);
/**//// <summary>
/// 获取当前数据库类型的所有数据类型。
/// </summary>
/// <returns>数据类型泛型</returns>
DataTypeCollection GetDataTypes();
/**//// <summary>
/// 获取当前数据表的所有主、外键约束(关系)。
/// </summary>
/// <param name="table">数据表</param>
/// <remarks>
/// DataSet中DataTable需要获取的列:name(关系名称),fkeyTableName(外键表名称),rkeyTableName(主键表名称),fkeyColumnName(外键表列名称),rkeyColumnName(主键表列名称)
/// </remarks>
/// <example>
/// select name,fkeyTableName,rkeyTableName,fkeyColumnName,rkeyColumnName from
/// </example>
/// <returns></returns>
DataSet GetPrimaryConstraint(string table);
/**//// <summary>
/// 保存数据表。
/// </summary>
/// <param name="data">要保存的数据</param>
/// <param name="tableFrame">要保存的数据表的数据结构</param>
void SaveData(DataSet data, DataTable tableFrame);
/**//// <summary>
/// 载入指定数据表的所有数据。
/// </summary>
/// <param name="table">数据表</param>
/// <returns></returns>
DataSet LoadData(string table);
}
}
二。生成SQL代码接口。
提供生成本数据库类型的相关SQL脚本的一系列功能接口(位于项目ICode中),如创建存储过程、视图的代码,的功能具体如下:
生成SQL脚本的接口
/**//// <summary>
/// 生成SQL脚本的接口类。
/// </summary>
public interface ICodeSqlscript
{
/**//// <summary>
/// 创建存储过程(插入)。
/// </summary>
/// <param name="dataColumns">数据结构</param>
/// <param name="name">存储过程名称</param>
/// <param name="table">要创建存储过程的数据表名</param>
/// <param name="execMode">数据库命令执行方式(ExecuteReader、DataSet、ExecuteNonQuery or ExecuteScalar)</param>
/// <param name="comment">备注</param>
/// <returns></returns>
string Create_Procedure_Insert(DataSet dataColumns, string name, string table,string execMode,string comment);
/**//// <summary>
/// 创建存储过程(更新)。
/// </summary>
/// <param name="dataColumns">数据结构</param>
/// <param name="name">存储过程名称</param>
/// <param name="table">要创建存储过程的数据表名</param>
/// <param name="execMode">数据库命令执行方式(ExecuteReader、DataSet、ExecuteNonQuery or ExecuteScalar)</param>
/// <param name="comment">备注</param>
/// <returns></returns>
string Create_Procedure_Update(DataSet dataColumns, string name, string table, string execMode, string comment);
/**//// <summary>
/// 创建存储过程(删除)。
/// </summary>
/// <param name="dataColumns">数据结构</param>
/// <param name="name">存储过程名称</param>
/// <param name="table">要创建存储过程的数据表名</param>
/// <param name="execMode">数据库命令执行方式(ExecuteReader、DataSet、ExecuteNonQuery or ExecuteScalar)</param>
/// <param name="comment">备注</param>
/// <returns></returns>
string Create_Procedure_Delete(DataSet dataColumns, string name, string table, string execMode, string comment);
/**//// <summary>
/// 创建存储过程(选择)。
/// </summary>
/// <param name="dataColumns">数据结构</param>
/// <param name="name">存储过程名称</param>
/// <param name="table">要创建存储过程的数据表名</param>
/// <param name="execMode">数据库命令执行方式(ExecuteReader、DataSet、ExecuteNonQuery or ExecuteScalar)</param>
/// <param name="comment">备注</param>
/// <returns></returns>
string Create_Procedure_Select(DataSet dataColumns, string name, string table, string execMode, string comment);
/**//// <summary>
/// 创建存储过程(选择并且分页)。
/// </summary>
/// <param name="dataColumns">数据结构</param>
/// <param name="name">存储过程名称</param>
/// <param name="table">要创建存储过程的数据表名</param>
/// <param name="execMode">数据库命令执行方式(ExecuteReader、DataSet、ExecuteNonQuery or ExecuteScalar)</param>
/// <param name="comment">备注</param>
/// <returns></returns>
string Create_Procedure_Select_Paging(DataSet dataColumns, string name, string table, string execMode, string comment);
/**//// <summary>
/// 创建自定义函数代码。
/// </summary>
/// <returns></returns>
string Create_Function();
/**//// <summary>
/// 创建视图代码。
/// </summary>
/// <returns></returns>
string Create_View();
/**//// <summary>
/// 从数据结构生成创建数据表的SQL。
/// </summary>
/// <param name="dataColumns">数据结构</param>
/// <param name="table">数据表</param>
/// <returns></returns>
string GetCreateTableSQL(DataSet dataColumns, string table);
/**//// <summary>
/// 从数据表结构生成Html代码。
/// </summary>
/// <param name="dataColumns">数据结构</param>
/// <param name="table">数据表</param>
/// <returns></returns>
string GetHtml(DataSet dataColumns, string table);
/**//// <summary>
/// 获取数据表设计器对象。
/// </summary>
/// <param name="table">数据表</param>
/// <param name="created">是否创建数据表</param>
/// <returns></returns>
AbstractTableDesign TableDesignInstance(string table,bool created);
/**//// <summary>
/// 获取数据表设计器对象。
/// </summary>
/// <param name="table">数据表</param>
/// <param name="created">是否创建数据表</param>
/// <returns></returns>
AbstractDataViewer TableViewInstance(string table);
/**//// <summary>
/// 获取 是否允许创建或修改数据表。
/// </summary>
bool EditorTableable{get;}
}
/**//// <summary>
/// 生成SQL脚本的接口类。
/// </summary>
public interface ICodeSqlscript
{
/**//// <summary>
/// 创建存储过程(插入)。
/// </summary>
/// <param name="dataColumns">数据结构</param>
/// <param name="name">存储过程名称</param>
/// <param name="table">要创建存储过程的数据表名</param>
/// <param name="execMode">数据库命令执行方式(ExecuteReader、DataSet、ExecuteNonQuery or ExecuteScalar)</param>
/// <param name="comment">备注</param>
/// <returns></returns>
string Create_Procedure_Insert(DataSet dataColumns, string name, string table,string execMode,string comment);
/**//// <summary>
/// 创建存储过程(更新)。
/// </summary>
/// <param name="dataColumns">数据结构</param>
/// <param name="name">存储过程名称</param>
/// <param name="table">要创建存储过程的数据表名</param>
/// <param name="execMode">数据库命令执行方式(ExecuteReader、DataSet、ExecuteNonQuery or ExecuteScalar)</param>
/// <param name="comment">备注</param>
/// <returns></returns>
string Create_Procedure_Update(DataSet dataColumns, string name, string table, string execMode, string comment);
/**//// <summary>
/// 创建存储过程(删除)。
/// </summary>
/// <param name="dataColumns">数据结构</param>
/// <param name="name">存储过程名称</param>
/// <param name="table">要创建存储过程的数据表名</param>
/// <param name="execMode">数据库命令执行方式(ExecuteReader、DataSet、ExecuteNonQuery or ExecuteScalar)</param>
/// <param name="comment">备注</param>
/// <returns></returns>
string Create_Procedure_Delete(DataSet dataColumns, string name, string table, string execMode, string comment);
/**//// <summary>
/// 创建存储过程(选择)。
/// </summary>
/// <param name="dataColumns">数据结构</param>
/// <param name="name">存储过程名称</param>
/// <param name="table">要创建存储过程的数据表名</param>
/// <param name="execMode">数据库命令执行方式(ExecuteReader、DataSet、ExecuteNonQuery or ExecuteScalar)</param>
/// <param name="comment">备注</param>
/// <returns></returns>
string Create_Procedure_Select(DataSet dataColumns, string name, string table, string execMode, string comment);
/**//// <summary>
/// 创建存储过程(选择并且分页)。
/// </summary>
/// <param name="dataColumns">数据结构</param>
/// <param name="name">存储过程名称</param>
/// <param name="table">要创建存储过程的数据表名</param>
/// <param name="execMode">数据库命令执行方式(ExecuteReader、DataSet、ExecuteNonQuery or ExecuteScalar)</param>
/// <param name="comment">备注</param>
/// <returns></returns>
string Create_Procedure_Select_Paging(DataSet dataColumns, string name, string table, string execMode, string comment);
/**//// <summary>
/// 创建自定义函数代码。
/// </summary>
/// <returns></returns>
string Create_Function();
/**//// <summary>
/// 创建视图代码。
/// </summary>
/// <returns></returns>
string Create_View();
/**//// <summary>
/// 从数据结构生成创建数据表的SQL。
/// </summary>
/// <param name="dataColumns">数据结构</param>
/// <param name="table">数据表</param>
/// <returns></returns>
string GetCreateTableSQL(DataSet dataColumns, string table);
/**//// <summary>
/// 从数据表结构生成Html代码。
/// </summary>
/// <param name="dataColumns">数据结构</param>
/// <param name="table">数据表</param>
/// <returns></returns>
string GetHtml(DataSet dataColumns, string table);
/**//// <summary>
/// 获取数据表设计器对象。
/// </summary>
/// <param name="table">数据表</param>
/// <param name="created">是否创建数据表</param>
/// <returns></returns>
AbstractTableDesign TableDesignInstance(string table,bool created);
/**//// <summary>
/// 获取数据表设计器对象。
/// </summary>
/// <param name="table">数据表</param>
/// <param name="created">是否创建数据表</param>
/// <returns></returns>
AbstractDataViewer TableViewInstance(string table);
/**//// <summary>
/// 获取 是否允许创建或修改数据表。
/// </summary>
bool EditorTableable{get;}
}
三。生成主程序代码接口。
提供生成主程序代码的一系列功能接口(位于项目ICode中),的功能具体如下:
ICodeProgramme
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Hxw.DE.IBase;
using Hxw.DE.IDAL;
namespace Hxw.DE.ICode
{
/**//// <summary>
/// 生成主程序代码的接口。
/// </summary>
/// <remarks>
/// 根据业务层的需要,生成N层代码。
/// </remarks>
public interface ICodeProgramme:IDisposable
{
/**//// <summary>
/// 获取 生成代码的参数类的泛型集合。
/// </summary>
List<ParmGenerateCode> GenerateCodeList { get;}
/**//// <summary>
/// 获取 当前生成的代码类型(编辑器高度显示)。
/// </summary>
CodeTypes Codetype { get;}
/**//// <summary>
/// 获取 当前生成的代码要保存为文件时的文件扩展名。
/// </summary>
string FileExtension { get;}
/**//// <summary>
/// 当配置选项发生改变时。
/// </summary>
/// <param name="bllAbstract">是否抽象业务逻辑</param>
/// <param name="enableCaching">当允许或禁用缓存</param>
/// <remarks>
/// 当配置参数发生改变时,生成的代码将会发生变化。
/// </remarks>
void OnOptionsChanged(bool bllAbstract, bool enableCaching);
/**//// <summary>
/// 当配置选项发生改变时。
/// </summary>
/// <param name="bllAbstract">是否抽象业务逻辑</param>
/// <param name="enableCaching">当允许或禁用缓存</param>
/// <param name="namingRulesList">类命名规则集合</param>
/// <param name="table">当前操作的数据表</param>
/// <param name="tableTagPrefix">要剔除的数据表前缀(空表示不剔除前缀)</param>
void OnOptionsChanged(bool bllAbstract, bool enableCaching, SortedList<string, string> namingRulesList, string table,string tableTagPrefix);
/**//// <summary>
/// 开始生成代码。
/// </summary>
/// <param name="dataColumns">当前数据表的数据结构模型</param>
/// <param name="table">当前需要生成代码的数据有名称</param>
/// <param name="spList">指定为某指定的存储过程创建代码的存储过程泛型(如果不为空)</param>
/// <param name="namespaceList">代码命名空间键值集合对象</param>
/// <param name="namingRulesList">类命名规则键值泛型对象</param>
/// <param name="plugin_Dataaccess">数据访问插件</param>
/// <param name="bllAbstract">是否抽象业务逻辑</param>
/// <param name="enableCaching">生成启用缓存功能的主程序代码或禁用缓存的主程序代码</param>
/// <param name="cachingFullClass">公共代码层命名空间</param>
/// <param name="tableTagPrefix">要剔除的数据表前缀(空表示不剔除前缀)</param>
void Generate(DataSet dataColumns, string table, List<string> spList, SortedList<string, string> namespaceList, SortedList<string, string> namingRulesList, IDataaccess plugin_Dataaccess, bool bllAbstract, bool enableCaching, string commonNamespace, string tableTagPrefix);
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Hxw.DE.IBase;
using Hxw.DE.IDAL;
namespace Hxw.DE.ICode
{
/**//// <summary>
/// 生成主程序代码的接口。
/// </summary>
/// <remarks>
/// 根据业务层的需要,生成N层代码。
/// </remarks>
public interface ICodeProgramme:IDisposable
{
/**//// <summary>
/// 获取 生成代码的参数类的泛型集合。
/// </summary>
List<ParmGenerateCode> GenerateCodeList { get;}
/**//// <summary>
/// 获取 当前生成的代码类型(编辑器高度显示)。
/// </summary>
CodeTypes Codetype { get;}
/**//// <summary>
/// 获取 当前生成的代码要保存为文件时的文件扩展名。
/// </summary>
string FileExtension { get;}
/**//// <summary>
/// 当配置选项发生改变时。
/// </summary>
/// <param name="bllAbstract">是否抽象业务逻辑</param>
/// <param name="enableCaching">当允许或禁用缓存</param>
/// <remarks>
/// 当配置参数发生改变时,生成的代码将会发生变化。
/// </remarks>
void OnOptionsChanged(bool bllAbstract, bool enableCaching);
/**//// <summary>
/// 当配置选项发生改变时。
/// </summary>
/// <param name="bllAbstract">是否抽象业务逻辑</param>
/// <param name="enableCaching">当允许或禁用缓存</param>
/// <param name="namingRulesList">类命名规则集合</param>
/// <param name="table">当前操作的数据表</param>
/// <param name="tableTagPrefix">要剔除的数据表前缀(空表示不剔除前缀)</param>
void OnOptionsChanged(bool bllAbstract, bool enableCaching, SortedList<string, string> namingRulesList, string table,string tableTagPrefix);
/**//// <summary>
/// 开始生成代码。
/// </summary>
/// <param name="dataColumns">当前数据表的数据结构模型</param>
/// <param name="table">当前需要生成代码的数据有名称</param>
/// <param name="spList">指定为某指定的存储过程创建代码的存储过程泛型(如果不为空)</param>
/// <param name="namespaceList">代码命名空间键值集合对象</param>
/// <param name="namingRulesList">类命名规则键值泛型对象</param>
/// <param name="plugin_Dataaccess">数据访问插件</param>
/// <param name="bllAbstract">是否抽象业务逻辑</param>
/// <param name="enableCaching">生成启用缓存功能的主程序代码或禁用缓存的主程序代码</param>
/// <param name="cachingFullClass">公共代码层命名空间</param>
/// <param name="tableTagPrefix">要剔除的数据表前缀(空表示不剔除前缀)</param>
void Generate(DataSet dataColumns, string table, List<string> spList, SortedList<string, string> namespaceList, SortedList<string, string> namingRulesList, IDataaccess plugin_Dataaccess, bool bllAbstract, bool enableCaching, string commonNamespace, string tableTagPrefix);
}
}
以下生成主程序代码的接口中一个重要的参数类:
ParmGenerateCode
using System;
namespace Hxw.DE.IBase
{
/**//// <summary>
/// 生成代码的 参数类。
/// </summary>
public class ParmGenerateCode
{
构造器#region 构造器
/**//// <summary>
/// 构造器。
/// </summary>
/// <param name="caption">当前代码层的标题</param>
public ParmGenerateCode(string caption)
{
this.caption = caption;
}
#endregion
变量#region 变量
/**//// <summary>
/// 当前代码层的标题。
/// </summary>
private string caption = string.Empty;
/**//// <summary>
/// 当前代码层的类名称。
/// </summary>
private string className = string.Empty;
/**//// <summary>
/// 当前代码层的代码。
/// </summary>
private string code = string.Empty;
/**//// <summary>
/// 当前代码是否单独保存。
/// </summary>
private bool saveBySelf = true;
/**//// <summary>
/// 当前代码层的片断代码(只有当saveBySelt为否时)。
/// </summary>
private string bittyCode = string.Empty;
/**//// <summary>
/// 代码片断替换标签。
/// </summary>
private string bittyCodeReplacemen = string.Empty;
/**//// <summary>
/// 当前代码层的命名空间。
/// </summary>
private string namdspace = string.Empty;
#endregion
属性#region 属性
/**//// <summary>
/// 获取 当前代码层的标题。
/// </summary>
public string Caption
{
get { return this.caption; }
}
/**//// <summary>
/// 获取或设置 当前代码层的类名称。
/// </summary>
public string ClassName
{
get { return this.className; }
set { this.className = value; }
}
/**//// <summary>
/// 获取或设置 当前代码层的命名空间。
/// </summary>
public string Namdspace
{
get { return this.namdspace; }
set { this.namdspace = value; }
}
/**//// <summary>
/// 获取或设置 当前代码层的完整代码。
/// </summary>
public string Code
{
get { return this.code; }
set { this.code = value; }
}
/**//// <summary>
/// 获取或设置 当前代码是否单独保存。
/// </summary>
/// <remarks>
/// 主要是区分单独保存为一个文件和非单独保存的文件文件。
/// 以Petshop的架构为例:
/// Model、IDAL、DAL和BLL层为单独保存的类型;
/// DALFactory为非单独保存的类型,是将当前项目中所有需要创建DAL对象的过程放在一个文件中。
/// 设置此属性为false表示为非单独保存,同时将代码分为Code和BittyCode两部分代码。在批量生成代码时,累加BittyCode代码,
/// 到最后时,再将Code替换标签(BittyCodeReplacemen值设定)替换为累加的BittyCode代码,如此组成一个完整的代码。
/// </remarks>
public bool SaveBySelf
{
get { return this.saveBySelf; }
set { this.saveBySelf = value; }
}
/**//// <summary>
/// 获取或设置 当前代码层的片断代码。
/// </summary>
/// <remarks>当SaveBySelf设置为false为有效</remarks>
public string BittyCode
{
get { return this.bittyCode; }
set { this.bittyCode = value; }
}
/**//// <summary>
/// 获取或设置 代码片断替换标签。
/// </summary>
/// <remarks>当SaveBySelf设置为false为有效</remarks>
public string BittyCodeReplacemen
{
get { return this.bittyCodeReplacemen; }
set { this.bittyCodeReplacemen = value; }
}
#endregion
重载方法#region 重载方法
public override string ToString()
{
return this.caption;
}
#endregion
}
}
using System;
namespace Hxw.DE.IBase
{
/**//// <summary>
/// 生成代码的 参数类。
/// </summary>
public class ParmGenerateCode
{
构造器#region 构造器
/**//// <summary>
/// 构造器。
/// </summary>
/// <param name="caption">当前代码层的标题</param>
public ParmGenerateCode(string caption)
{
this.caption = caption;
}
#endregion
变量#region 变量
/**//// <summary>
/// 当前代码层的标题。
/// </summary>
private string caption = string.Empty;
/**//// <summary>
/// 当前代码层的类名称。
/// </summary>
private string className = string.Empty;
/**//// <summary>
/// 当前代码层的代码。
/// </summary>
private string code = string.Empty;
/**//// <summary>
/// 当前代码是否单独保存。
/// </summary>
private bool saveBySelf = true;
/**//// <summary>
/// 当前代码层的片断代码(只有当saveBySelt为否时)。
/// </summary>
private string bittyCode = string.Empty;
/**//// <summary>
/// 代码片断替换标签。
/// </summary>
private string bittyCodeReplacemen = string.Empty;
/**//// <summary>
/// 当前代码层的命名空间。
/// </summary>
private string namdspace = string.Empty;
#endregion
属性#region 属性
/**//// <summary>
/// 获取 当前代码层的标题。
/// </summary>
public string Caption
{
get { return this.caption; }
}
/**//// <summary>
/// 获取或设置 当前代码层的类名称。
/// </summary>
public string ClassName
{
get { return this.className; }
set { this.className = value; }
}
/**//// <summary>
/// 获取或设置 当前代码层的命名空间。
/// </summary>
public string Namdspace
{
get { return this.namdspace; }
set { this.namdspace = value; }
}
/**//// <summary>
/// 获取或设置 当前代码层的完整代码。
/// </summary>
public string Code
{
get { return this.code; }
set { this.code = value; }
}
/**//// <summary>
/// 获取或设置 当前代码是否单独保存。
/// </summary>
/// <remarks>
/// 主要是区分单独保存为一个文件和非单独保存的文件文件。
/// 以Petshop的架构为例:
/// Model、IDAL、DAL和BLL层为单独保存的类型;
/// DALFactory为非单独保存的类型,是将当前项目中所有需要创建DAL对象的过程放在一个文件中。
/// 设置此属性为false表示为非单独保存,同时将代码分为Code和BittyCode两部分代码。在批量生成代码时,累加BittyCode代码,
/// 到最后时,再将Code替换标签(BittyCodeReplacemen值设定)替换为累加的BittyCode代码,如此组成一个完整的代码。
/// </remarks>
public bool SaveBySelf
{
get { return this.saveBySelf; }
set { this.saveBySelf = value; }
}
/**//// <summary>
/// 获取或设置 当前代码层的片断代码。
/// </summary>
/// <remarks>当SaveBySelf设置为false为有效</remarks>
public string BittyCode
{
get { return this.bittyCode; }
set { this.bittyCode = value; }
}
/**//// <summary>
/// 获取或设置 代码片断替换标签。
/// </summary>
/// <remarks>当SaveBySelf设置为false为有效</remarks>
public string BittyCodeReplacemen
{
get { return this.bittyCodeReplacemen; }
set { this.bittyCodeReplacemen = value; }
}
#endregion
重载方法#region 重载方法
public override string ToString()
{
return this.caption;
}
#endregion
}
}
用户只需分别实现其中某个接口,即可在本系统中应用。注意,接口实现类同时必须实现PluginInfoAttribute属性,才能作为本系统中的合法插件,PluginInfoAttribute位于IBase项目中,须添加IBase的引用。PluginInfoAttribute的使用如下:
[PluginInfo("MSSQLServer 2000数据访问类", "1.0.0.0", "版权所有(2005-2007) mrhgw", "mrhgw", "", "提供数据访问的操作。适用数据库:MSSQLServer 2000")]
public class DALSqlserver2000 : AbstractDAL,IDataaccess
有兴趣的朋友可以试一下,如有疑问请留言或QQ:157561711(本人),41195215(.net项目开发讨论群)。