/// <summary> /// 判断并构建指定行被指示的提交命令。 /// </summary> /// <param name="Row">被提交的行。</param> /// <param name="rowSubmission">对该行的处理指示。</param> /// <returns></returns> private DbCommandBuilder RowSubmissionCommand(SpeedDataRow Row, DataRowSubmission rowSubmission) { if (rowSubmission == null) { return(null); } // 开始构建命令。 DbCommandBuilder Command = new DbCommandBuilder(); switch (rowSubmission.Submission) { case QuickDataChangerSubmission.Delete: if (rowSubmission.Conditions != null && rowSubmission.Conditions.Count > 0) { Command.Delete(Row.Table.TableName).Where(rowSubmission.Conditions.ToArray()); } break; case QuickDataChangerSubmission.Update: if (rowSubmission.Conditions != null && rowSubmission.Conditions.Count > 0) { List <IDescription> expressions = new List <IDescription>(); foreach (SpeedDataColumn c in Row.Table.Columns) { if (!NotInsertFieldsContains(rowSubmission, c.Name)) { expressions.Add(td.Field(c.Name) == Row[c.Name]); } } Command.Update(Row.Table.TableName).Set(expressions.ToArray()).Where(rowSubmission.Conditions.ToArray()); } break; case QuickDataChangerSubmission.Insert: List <FieldDescription> Fields = new List <FieldDescription>(); List <object> Values = new List <object>(); foreach (SpeedDataColumn c in Row.Table.Columns) { if (!NotInsertFieldsContains(rowSubmission, c.Name)) { Fields.Add(td.Field(c.Name)); Values.Add(Row[c.Name]); } } Command.Insert(fm.Table(Row.Table.TableName), Fields.ToArray()).Values(Values.ToArray()); break; default: break; } return(Command); }
/// <summary> /// 指行指定的查询命令,并返回数据集。 /// </summary> /// <param name="Command">要执行的查询。</param> /// <returns></returns> public SpeedDataTable ExecuteQuery(CommandBuilder Command) { IDataReader Rd = ExecuteReader(Command); if (Rd == null) { return(null); } SpeedDataTable dt = new SpeedDataTable(); using (Rd) { string FieldName; int i = 0; // 创建列集合。 if (Rd.FieldCount > 0) { for (; i < Rd.FieldCount; ++i) { FieldName = Rd.GetName(i); dt.Columns.Add(FieldName, Rd.GetFieldType(i)); } } // 填充所有行。 while (Rd.Read()) { SpeedDataRow Row = new SpeedDataRow(dt); for (i = 0; i < Rd.FieldCount; ++i) { Row[i] = Rd.GetValue(i); } dt.Add(Row); } Rd.Close(); } return(dt); }