在上一篇中讲了根据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;
}