首页 / 网页编程 / ASP.NET / 自己动手写ASP.NET ORM框架(七):实现新增功能Save方法
        
            自己动手写ASP.NET ORM框架(七):实现新增功能Save方法2011-04-24 博客园 奋斗在上一篇中讲了根据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;
}