private static LastInsertId Insert(IAccessDb db, TableInfo ti, object data) { var p = db.Provider; List <object> args = null; var d = data.ToDictionary(); if (ti.InsertSql == null) { var sb = new StringBuilder("Insert into"); sb.AppendFormat(" {0} (", p.EscapeName(ti.Name)); args = FillArgs(d, ti, p, sb); sb.Remove(sb.Length - 1, 1); sb.Append(") values("); for (var i = 0; i < args.Count; i++) { sb.Append("@" + i + ","); } sb.Remove(sb.Length - 1, 1); sb.Append(")"); ti.InsertSql = sb.ToString(); } if (args == null) { args = FillArgs(d, ti, p); } var st = db.WithSql(ti.InsertSql, args.ToArray()) as SqlStatement; st.ReuseCommand = true; LastInsertId rez; try { rez = db.Provider.ExecuteInsert(st, ti.PrimaryKey); } finally { db.CloseConnection(); } return(rez); }