C/S框架后台数据更新模型之ORM自动生成SQL基本原理
基于ADO.NET提交数据需要程序员写代码,使用DataAdapter.Update()方法提交数据前要实现3个DbCommand,分别是InsertCommand、UpdateCommand、DeleteCommand。作者有5年Delphi开发经验,Delphi只需调用ADOQuery.Update()就行了,不需要写3个DbCommand以及任何SQL脚本(特殊处理除外)。
说说CSFramework.COM后台数据更新模型
作者开发过多套基于数据管理应用系统,最原始的提交数据常用方法是使用Update,Insert,Delete三种SQL语句,数据表越多写的SQL越多,效率很低,开发周期变长。后来接触NHibernate组件,在我们的一个系统中成功应用了,接触新技术总是兴奋的,快速进入状态。在项目中期阶段,发现配置NHibernate所需的XML文件实在太多,维护带来的工作量也特别大,随着系统迭代升级,变的也越来越复杂。
NHibernate配置的XML文件对我有所启发,为什么要使用XML?
若把XML改装为C#的静态类或实体类是否更有效?
》》》 请看下面代码:
public class TProduct
{
[TableAttribute (true, false, true)]
public static string TableName = "tb_MyProduct";
[TableAttribute (false, true, false)]
public static string KeyName = "ProductCode";
[FieldAttribute (SqlDbType.Int, 4, false, false, false, false, false)]
public static string isid = "isid";
[FieldAttribute (SqlDbType.NVarChar, 20, false, true, false, false, false)]
public static string ProductCode = "ProductCode";
[FieldAttribute (SqlDbType.NVarChar, 50, false, true, false, false, false)]
public static string ProductName = "ProductName";
[FieldAttribute (SqlDbType.Decimal, 18, false, true, false, false, false)]
public static string SellPrice = "SellPrice";
[FieldAttribute (SqlDbType.NVarChar, 50, false, true, false, false, false)]
public static string Supplier = "Supplier";
[FieldAttribute (SqlDbType.NVarChar, 100, false, true, false, false, false)]
public static string Remark = "Remark";
}
这个类有两个功能:
//字段名
TProduct.ProductCode
//获取主表关键字
string key = data.Tables[TProductTake.TableName].Rows[0][TProductTake.TakeNo].ToString ();
/// <summary>
/// 业务逻辑管理主类. www.csframework.com 版权所有
/// </summary>
public class DataManager : DataUpdate
{
public DataManager(OleDbConnection conn)
: base(conn)
{
//
}
protected override Type GetTypeByTableName(string tableName)
{
if (tableName == TProductTake.TableName)
& nbsp; return typeof (TProductTake);
if (tableName == TProductTakeDetail.TableName)
& nbsp; return typeof (TProductTakeDetail);
throw new Exception("没绑定数据表结构 定义!");
}
public bool Update(System.Data.DataSet currentBusiness, UpdateType updateType)
{
return base.Update (currentBusiness);
}
}
在界面层调用 :
private void TestSave()
{
//初始化业务逻辑
DataManager dataManager = new DataManager(DataProvider.Instance.CreateConnection());
DataSet data = null;//你要保存的数据
dataManager.Update(data);
}
数据更新流程
扫一扫加微信