Example #1
0
        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);
                }
            }
        }
Example #2
0
        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));
        }