首页 > Linux操作系统 > Linux操作系统 > 分享我的数据处理类库,欢迎拍砖
说明:首先在实体类中定义Attribute对象(主要包括表、字段信息),然后通过反射读取该对象信息,再进行数据处理
一、类关系图如下:

二、各类用途说明
BaseEntity:实体类的基类,实体类必须继承该类。
TableConfig/FieldConfig:描述表及字段配置信息,其中FieldConfig包括FieldName(字段名称)、DataType(数据类型)、Size(字段大小)、IsInsert(是否Insert操作)、IsUpdate(是否Update操作)五个字段信息。
QueryHelper:查询对象。
SplitPageParameter:分页对象。
IDbProvider:数据处理接口。
OperationAction:数据操作枚举。
DataProvider:实现IDbProvider接口,并提供基础数据操作。
SqlDbProvider/OleDbProvider:继承自DataProvider并提供相应操作。
DataFactory:向外部提供IDbProvider服务。
三、配置文件需提供如下信息:
CNT:数据连接字符串
DBTYPE:数据库类型(目前只支持MSSQL/OLEDB)
EntityFile:实体类程序集信息
四、接口说明:
void Save(BaseEntity info):保存实体类
void Update(BaseEntity info, QueryHelper query):根据条件更新实体类
void Delete(QueryHelper query):根据条件删除数据
BaseEntity Find(QueryHelper query):根据条件读取一条数据
List
List
void UpdateFields(string tableName, string[] fieldNames, object[] fieldValues, QueryHelper query):根据条件更新指定表的指定字段
五、核心函数说明
(1)、DataProvider.cs

/**////
/// 准备生成DbCommand命令
///
/// 实体类对象
/// 数据类型
/// 数据操作动作
/// 条件对象
///
protected IDbCommand PrepareCommand(object o, Type type, OperationAction action, QueryHelper query)
{
IDbCommand cmd = Factory.CreateCommand();
//获取当前类型的表配置信息
TableConfig configInfo = null;
if (type == null)
{
type = query.TypeInfo;
}
configInfo = getTableConfigByType(type);
FieldInfo fldInfo = null;
IDataParameter parameter = null;
if (action == OperationAction.Insert)
{
insert config#region insert config
StringBuilder sqlInsert = new StringBuilder();
StringBuilder sqlValues = new StringBuilder();
for (int i = 0; i < configInfo.Fields.Count; ++i)
{
if (!configInfo.Fields[i].IsInsert)
continue;
if (sqlInsert.Length > 0)
{
sqlInsert.Append(",");
sqlValues.Append(",");
}
sqlInsert.Append(configInfo.Fields[i].FieldName);
sqlValues.Append("@").Append(configInfo.Fields[i].FieldName);
parameter = MakeParameter(configInfo.Fields[i]);
//获取字段信息
fldInfo = type.GetField(configInfo.Fields[i].FieldName);
//从对象中获取该字段的值
if (fldInfo != null)
{
parameter.Value = fldInfo.GetValue(o);
}
cmd.Parameters.Add(parameter);
}
//设置Command的命令文本
cmd.CommandText = string.Format("INSERT INTO {0}({1}) VALUES({2})", configInfo.TableName, sqlInsert.ToString(), sqlValues.ToString());
#endregion
}
else if (action == OperationAction.Update)
{
update config#region update config
StringBuilder sqlUpdate = new StringBuilder();
for (int i = 0; i < configInfo.Fields.Count; ++i)
{
if (!configInfo.Fields[i].IsUpdate)
continue;
if (sqlUpdate.Length > 0)
{
sqlUpdate.Append(",");
}
sqlUpdate.Append(string.Format(" {0}=@{0}", configInfo.Fields[i].FieldName));
parameter = MakeParameter(configInfo.Fields[i]);
//获取字段信息
fldInfo = type.GetField(configInfo.Fields[i].FieldName);
//从对象中获取该字段的值
if (fldInfo != null)
{
parameter.Value = fldInfo.GetValue(o);
}
cmd.Parameters.Add(parameter);
}
//设置Command的命令文本
cmd.CommandText = string.Format("UPDATE {0} SET {1} ", configInfo.TableName, sqlUpdate.ToString());
if (query != null)
cmd.CommandText += string.Format(" WHERE 1=1 {0}", query.getSQLString);
#endregion
}
else if (action == OperationAction.Delete)
{
delete config#region delete config
cmd.CommandText = string.Format("DELETE {0}", configInfo.TableName);
if (query != null)
cmd.CommandText += string.Format(" WHERE 1=1 {0}", query.getSQLString);
#endregion
}
else if (action == OperationAction.Select)
{
select config#region select config
if (query != null)
{
if (query.Top > 0)
{
cmd.CommandText = string.Format("SELECT TOP {0} * FROM {1} WHERE 1=1 {2}", query.Top, configInfo.TableName, query.getSQLString);
}
else
{
cmd.CommandText = string.Format("SELECT * FROM {0} WHERE 1=1 {1}", configInfo.TableName, query.getSQLString);
}
}
else
{
cmd.CommandText = string.Format("SELECT * FROM {0}", configInfo.TableName);
}
#endregion
}
return cmd;
}此函数根据对象类型,通过反射获取实体类信息及实体类字段值,然后组织SQL语句为IDbCommand赋值
应用场景:
适合数据处理较小的应用
使用:
DataFactory.getDbProvider.Save(info);
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12639172/viewspace-617186/ ,如需转载,请注明出处,否则将追究法律责任。