public DataTable GetResults(ISearchDetails details) { if (!(details.Target is ISqlSubject)) { throw new ArgumentException("Target subject must be of type ISqlSubject."); } if (details.Where != null && !(details.Where is ISqlParameter)) { throw new ArgumentException("Where parameter must be of type ISqlParameter."); } var generator = GetGenerator(); generator.Target = (ISqlSubject)details.Target; generator.Columns = details.Columns; generator.Where = (ISqlParameter)details.Where; using (var conn = CreateConnection()) { using (var cmd = conn.CreateCommand()) { //cmd.CommandTimeout = CommandTimeout; generator.UpdateCommand(cmd); details.Sql = GetSql(cmd); var adapter = CreateDataAdapter(); adapter.SelectCommand = cmd; var ds = new DataSet(); adapter.Fill(ds); var result = ds.Tables[0]; if (adapter is IDisposable) { ((IDisposable)adapter).Dispose(); } for (int i = 0; i < result.Columns.Count; i++) { result.Columns[i].ExtendedProperties.Add("FieldPath", details.Columns[i]); } return(result); } } }
public Action GetResults(ISearchDetails details, IDbServiceAsyncCallback <DataTable> callback) //ResultCallback callback) { var worker = new BackgroundWorker(); worker.WorkerSupportsCancellation = true; worker.DoWork += (s1, e1) => { e1.Result = GetResults(details); e1.Cancel = worker.CancellationPending; }; worker.RunWorkerCompleted += (s2, e2) => { worker.Dispose(); // cancellation assumes the SearchWorker property has been set null if (e2.Cancelled) { return; } if (e2.Error != null) { //MessageBox.Show("There was an error when trying to perform the search.\n\n" + e2.Error.Message, "Search", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); callback.Exception = e2.Error; } else { callback.Results = (DataTable)e2.Result; //callback(details, (DataTable)e2.Result); } callback.Callback(callback); }; worker.RunWorkerAsync(); return(new Action(worker.CancelAsync)); }