public override object GetDataObject(DataLinkParams dlp)
        {
            DbCommand command = CreateCommand(dlp);

            if (command == null)
            {
                return(null);
            }

            using (command)
            {
                try
                {
                    var stmt = SQLite3.Prepare2(command.Connection.Handle, command.CommandText);
                    using (stmt)
                    {
                        // setup parameters
                        BindParameters(stmt, command);

                        // build Recordset object
                        Recordset result = new Recordset();
                        // create columns
                        GetColumns(stmt, out result.Names, out result.Types);
                        for (int i = 0; i < result.Names.Length; i++)
                        {
                            result.AddColumn();
                        }
                        // fill recordset
                        object[] values = new object[result.Names.Length];
                        while (SQLite3.Step(stmt) == SQLite3.Result.Row && (dlp.MaxRecords <= 0 || result.Count < dlp.MaxRecords))
                        {
                            for (int i = 0; i < result.Names.Length; i++)
                            {
                                values[i] = ReadCol(stmt, i, SQLite3.ColumnType(stmt, i));
                            }
                            result.Add(values);
                        }

                        return(result);
                    }
                }
                catch
                {
                    return(null);
                }
            }
        }