自己动手写ASP.NET ORM框架(七):实现新增功能Save方法

在上一篇中讲了根据ID查询的功能FindById方法,接下来将实现Save方法的功能,代码如 下1-1:

#region 将实体数据保存到数据库
public int Save<T>(T entity)
{
     //从实体类中获取新增数据所需的表信息存于TableInfo对象中
     TableInfo tableInfo = DbEntityUtils.GetTableInfo (entity,DbOperateType.INSERT);
     //根据tableInfo对象中的数据生成新增的SQL语句
     string strSql = DbEntityUtils.GetInsertSql(tableInfo);
     //根据tableInfo中Columns的数量创建参数数组
     IDbDataParameter[] parms = DbFactory.CreateDbParameters (tableInfo.Columns.Count);

     //将tableInfo对象中Columns集合中数据设置到参数数组中
     DbEntityUtils.SetParameters(tableInfo.Columns, parms);

     //执行SQL命令
     object val = AdoHelper.ExecuteNonQuery(transaction,  CommandType.Text, strSql, parms);
     //返回所影响的行数
     return Convert.ToInt32(val);
}
#endregion

代码1-1中DbEntityUtils.GetTableInfo方法在实现查询功能FindById方法中已经有分析 了。

代码string strSql = DbEntityUtils.GetInsertSql(tableInfo); 中 DbEntityUtils.GetInsertSql代码如下1-2:

public static string GetInsertSql(TableInfo tableInfo)
{
     StringBuilder sbColumns = new StringBuilder();
     StringBuilder sbValues = new StringBuilder();
     //将tableInfo中的Id的名称和值存入Columns集合中
     tableInfo.Columns.Put(tableInfo.Id.Key, tableInfo.Id.Value);
     foreach (string key in tableInfo.Columns.Keys)
     {
         if (!string.IsNullOrEmpty(key.Trim()))
         {
             //根据Columns集合中key生成SQL语句,例如:
             //strsql = “insert into student (studentid,studentno,name) values((@studentid,@studentno,@name)”;
             object value = tableInfo.Columns[key];
             sbColumns.Append(key).Append(",");
             sbValues.Append(AdoHelper.DbParmChar).Append (key).Append(",");
         }
     }
     sbColumns.Remove(sbColumns.ToString().Length - 1, 1);
     sbValues.Remove(sbValues.ToString().Length - 1, 1);
     string strSql = "INSERT INTO {0}({1}) VALUES({2})";
     strSql = string.Format(strSql, tableInfo.TableName,  sbColumns.ToString(), sbValues.ToString());
     return strSql;
}

时间: 2024-08-02 22:44:03

自己动手写ASP.NET ORM框架(七):实现新增功能Save方法的相关文章

自己动手写ASP.NET ORM框架(六):实现查询功能FindById方法

通过配置实体与表的关系映射后,就可以实现对表的操作了,接下来实现简单对象的新增 功能.下面代码1-1是定义的操作数据对象方法的接口: using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; namespace System.Orm.EntityManager { public interface EntityManager

自己动手写ASP.NET ORM框架(九):实现删除功能Remove方法

前面简单的修改功能已经实现了,下面是实现删除功能,代码1-1如下: #region 删除实体对应数据库中的数据 public int Remove<T>(T entity) { TableInfo tableInfo = DbEntityUtils.GetTableInfo(entity, DbOperateType.DELETE); string strSql = DbEntityUtils.GetDeleteByIdSql(tableInfo); IDbDataParameter[] pa

自己动手写ASP.NET ORM框架(八):实现修改功能Update方法

前面一节中已经实现了简单的新增功能,下面来实现修改功能,代码如下1-1: #region 将实体数据修改到数据库 public int Update<T>(T entity) { TableInfo tableInfo = DbEntityUtils.GetTableInfo (entity,DbOperateType.UPDATE); string strSql = DbEntityUtils.GetUpdateSql(tableInfo); IDbDataParameter[] parms

自己动手写ASP.NET ORM框架(二):AdoHelper支持多数据库操作的封装(2)

在上一篇文章中已经分析了AdoHelper的部分代码,接下来将继续分析剩余的部分代码,这里分析ExecuteNonQuery方法的实现,代码块1-1: // <summary>//通过提供的参数,执行无结果集的数据库操作命令// 并返回执行数据库操作所影响的行数.// </summary>// <param name="connectionString">数据库连接字符串</param>// <param name="co

自己动手写ASP.NET ORM框架(一):目标效果预览

最终实现后达到的效果,只需写少量代码就可实现CURD操作. DAL层代码: StudentDAL代码 public class StudentDAL { EntityManager entityManager = EntityManagerFactory.CreateEntityManager(); public StudentDAL() { } public StudentDAL(IDbTransaction transaction) { entityManager.Transaction =

自己动手写ASP.NET ORM框架(五):关系映射配置—Column属性

这次将完成最后一个自定义属性功能Column,在讲Column实现之前先看看Student表的结构 如下: create table student ( studentid VARCHAR2(40), studentno VARCHAR2(40), name VARCHAR2(40), address VARCHAR2(40), telphone VARCHAR2(40) ) 然后来看看Column自定义属性的具体用法代码1-1: using System; using System.Data;

自己动手写ASP.NET ORM框架(四):关系映射配置—Id属性

上一篇中完成了Table自定义属性的功能,现在来完成Id,因为一张表最主要的是结构就 是表名(Table name).主键(Id).列(Column).主键生成策略. Id自定义属性的用法代码块1-1: [Table(name="Student")] public class StudentEntity { private string stuid; [Id(Name = "studentid", Strategy = GenerationType.SEQUENCE

自己动手写ASP.NET ORM框架(三):关系映射配置—Table属性

在上一篇随笔中已经完成了ADO.NET操作数据库的封装,并已经支持多数据库,只需要在 配置文件中指定数据库类型即可,本节主要完成对象与数据库表的关系映射配置. 下面看表名的映射配置代码块1-1: [Table(Name="Student")] public class StudentEntity { //...........省略 } 在类上面用[Table(name = "Student")]属性来配置,表示该实体类StudentEntity与数 据库中的Stud

一起谈.NET技术,细数ASP.NET MVC框架的7大顶级功能

ASP.NET MVC框架对构建ASP.NET应用程序的开发人员来说的确很有吸引力,因为它的松耦合特征使项目管理变得更加轻松,ASP.NET MVC最初由微软随.NET framework 3.5 SP1一起引入(即ASP.NET MVC 1.0),现在.NET Framework 4.0和Visual Studio 2010默认支持第二个版本,即ASP.NET MVC 2.0,在这篇文章中,我将带你领略一下ASP.NET MVC框架的7个顶级功能. 所有概念都围绕下面三个主要组件展开: · 模