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