Пример #1
0
        public DataTable Read()
        {
            var sqlType   = FindSqlType(_providerName);
            var originSql = new SqlWriter(_databaseTable, sqlType);
            var selectAll = originSql.SelectPageSql();

            var dt = new DataTable(_databaseTable.Name)
            {
                Locale = CultureInfo.InvariantCulture
            };

            var dbFactory = DbProviderFactories.GetFactory(_providerName);

            using (var con = dbFactory.CreateConnection())
            {
                con.ConnectionString = _connectionString;
                using (var cmd = con.CreateCommand())
                {
                    BuildCommand(cmd, selectAll, sqlType);

                    using (var da = dbFactory.CreateDataAdapter())
                    {
                        da.SelectCommand = cmd;
                        da.Fill(dt);
                    }
                }
            }
            return(dt);
        }
Пример #2
0
        public DataTable Read(DbConnection connection)
        {
            if (connection == null)
            {
                throw new ArgumentNullException(nameof(connection));
            }
            if (string.IsNullOrEmpty(connection.ConnectionString))
            {
                throw new ArgumentException("Connection has no connection string");
            }

            var providerName = _providerName;

            if (string.IsNullOrEmpty(providerName))
            {
                providerName = connection.GetType().Namespace;
            }
            var sqlType = FindSqlType(providerName);

#if NETSTANDARD2_0
            var dbFactory = FactoryFinder.FindFactory(connection);
#else
            var dbFactory = DbProviderFactories.GetFactory(providerName);
#endif
            var originSql = new SqlWriter(_databaseTable, sqlType);
            var selectAll = originSql.SelectPageSql();

            var dt = new DataTable(_databaseTable.Name)
            {
                Locale = CultureInfo.InvariantCulture
            };
            if (dbFactory == null)
            {
                Console.WriteLine("Cannot find the DbProviderFactory (provider not netstandard 2.0?)");
                return(dt);
            }
            if (connection.State == ConnectionState.Closed)
            {
                connection.Open();
            }

            using (var cmd = connection.CreateCommand())
            {
                BuildCommand(cmd, selectAll, sqlType);

                using (var da = dbFactory.CreateDataAdapter())
                {
                    da.SelectCommand = cmd;
                    da.Fill(dt);
                }
            }
            return(dt);
        }
Пример #3
0
        public void BuildTableSelectPaged(DatabaseTable databaseTable)
        {
            var sqlWriter = new SqlWriter(databaseTable, _sqlType);

            try
            {
                var txt = sqlWriter.SelectPageSql();
                Clipboard.SetText(txt, TextDataFormat.UnicodeText);
            }
            catch (Exception exception)
            {
                Debug.WriteLine(exception.Message);
            }
        }
Пример #4
0
        public string BuildTableSelectPaged(DatabaseTable databaseTable)
        {
            StringBuilder sb        = new StringBuilder();
            var           sqlWriter = new SqlWriter(databaseTable, m_sqlType);

            try
            {
                sb.Append(sqlWriter.SelectPageSql());
            }
            catch (Exception exception)
            {
                Debug.WriteLine(exception.Message);
            }
            return(sb.ToString());
        }
Пример #5
0
        public DataTable Read()
        {
            var sqlType   = FindSqlType();
            var originSql = new SqlWriter(_databaseTable, sqlType);
            var selectAll = originSql.SelectPageSql();

            var dt = new DataTable(_databaseTable.Name)
            {
                Locale = CultureInfo.InvariantCulture
            };

            var dbFactory = DbProviderFactories.GetFactory(_providerName);

            using (var con = dbFactory.CreateConnection())
            {
                con.ConnectionString = _connectionString;
                using (var cmd = con.CreateCommand())
                {
                    cmd.CommandText    = selectAll;
                    cmd.CommandTimeout = 6000;
                    var p             = cmd.CreateParameter();
                    var parameterName = "currentPage";
                    if (sqlType == SqlType.SqlServerCe)
                    {
                        parameterName = "offset";
                    }
                    p.ParameterName = parameterName;
                    p.Value         = 1;
                    if (sqlType == SqlType.SqlServerCe)
                    {
                        p.Value = 0;
                    }
                    cmd.Parameters.Add(p);
                    var ps = cmd.CreateParameter();
                    ps.ParameterName = "pageSize";
                    ps.Value         = _pageSize;
                    cmd.Parameters.Add(ps);

                    using (var da = dbFactory.CreateDataAdapter())
                    {
                        da.SelectCommand = cmd;
                        da.Fill(dt);
                    }
                }
            }
            return(dt);
        }
Пример #6
0
        private void SelectPaged()
        {
            string procName = Prefix + "GETPAGED" + Suffix;
            string fileName = procName + ".sql";
            var    writer   = CreateProcedureWriter(procName);

            writer.AddParameter(ParameterName("currentPage"), ColumnDataType("INT"));
            writer.AddParameter(ParameterName("pageSize"), ColumnDataType("INT"));
            writer.AddOutputParameter(ParameterName("total"), ColumnDataType("INT"));
            writer.BeginProcedure(true);
            //returns two result sets- paged, and count of total
            writer.AddQuerySql(SqlWriter.SelectPageSql());
            writer.AddSql(SqlWriter.CountSql(ParameterName("total")));
            var txt = writer.End();

            WriteFile(fileName, txt);
            WriteSignature(writer.Signature());
        }
        public void TestGeneratedSqlForPaging()
        {
            var table = LoadCategoriesFromNorthwind();

            //arrange
            var writer = new SqlWriter(table, SqlType.SqlServerCe);
            var sql = writer.SelectPageSql(); //sane as writer.SelectPageStartToEndRowSql()
            //parameters are offset and pageSize, not the standard ones (limitations of OFFSET/FETCH in sqlserverCe)
            var dataTable = new DataTable();

            //run generated sql
            using (var con = _factory.CreateConnection())
            {
                con.ConnectionString = _connectionString;
                using (var cmd = con.CreateCommand())
                {
                    cmd.CommandText = sql;
                    var pageSize = cmd.CreateParameter();
                    pageSize.ParameterName = writer.ParameterName("pageSize");
                    pageSize.Value = 2;
                    cmd.Parameters.Add(pageSize);

                    var currentPage = cmd.CreateParameter();
                    currentPage.ParameterName = writer.ParameterName("offset");
                    currentPage.Value = 2;
                    cmd.Parameters.Add(currentPage);

                    var da = _factory.CreateDataAdapter();
                    da.SelectCommand = cmd;
                    da.Fill(dataTable);
                }
            }

            //assert
            Assert.IsTrue(dataTable.Rows.Count > 0, "There should be some categories (this test may fail if database table is empty)");
            Assert.IsTrue(dataTable.Rows.Count <= 4, "Should only return the page size (or less)");
            foreach (var column in table.Columns)
            {
                var name = column.Name;
                Assert.IsTrue(dataTable.Columns.Contains(name), "Should retrieve column " + name);
            }
        }
Пример #8
0
        public void RunPagingSql()
        {
            //arrange
            var writer    = new SqlWriter(_table, _sqlType);
            var sql       = writer.SelectPageSql();
            var dataTable = new DataTable();

            Console.WriteLine(sql);

            //run generated sql
            using (var con = _factory.CreateConnection())
            {
                con.ConnectionString = _connectionString;
                using (var cmd = con.CreateCommand())
                {
                    cmd.CommandText = sql;
                    var pageSize = cmd.CreateParameter();
                    pageSize.ParameterName = writer.ParameterName("pageSize");
                    pageSize.Value         = 4;
                    cmd.Parameters.Add(pageSize);

                    var currentPage = cmd.CreateParameter();
                    currentPage.ParameterName = writer.ParameterName("currentPage");
                    currentPage.Value         = 1;
                    cmd.Parameters.Add(currentPage);


                    var da = _factory.CreateDataAdapter();
                    da.SelectCommand = cmd;
                    da.Fill(dataTable);
                }
            }

            //assert
            Assert.IsTrue(dataTable.Rows.Count > 0, "There should be some categories (this test may fail if database table is empty)");
            Assert.IsTrue(dataTable.Rows.Count <= 4, "Should only return the page size (or less)");
            foreach (var column in _table.Columns)
            {
                var name = column.Name;
                Assert.IsTrue(dataTable.Columns.Contains(name), "Should retrieve column " + name);
            }
        }
Пример #9
0
        public void ReadNorthwindProductsWithCodeGen()
        {
            var dbReader = GetNortwindReader();

            dbReader.DataTypes(); //load the datatypes
            var table = dbReader.Table("Products");

            Debug.WriteLine("Table " + table.Name);

            foreach (var column in table.Columns)
            {
                //Cs properties (the column name could be made .Net friendly too)
                Debug.WriteLine("\tpublic " + column.DataType.NetCodeName(column) + " " + column.Name + " { get; set; }");
            }
            //	public int ProductID { get; set; }
            //	public string ProductName { get; set; }
            //	public int SupplierID { get; set; }
            //	public int CategoryID { get; set; }
            //	public string QuantityPerUnit { get; set; }
            //	public decimal UnitPrice { get; set; }
            //	public short UnitsInStock { get; set; }
            //	public short UnitsOnOrder { get; set; }
            //	public short ReorderLevel { get; set; }
            //	public bool Discontinued { get; set; }

            //get the sql
            var sqlWriter =
                new SqlWriter(table, DatabaseSchemaReader.DataSchema.SqlType.SqlServer);
            var sql = sqlWriter.SelectPageSql(); //paging sql

            sql = SqlWriter.SimpleFormat(sql);   //remove line breaks

            Debug.WriteLine(sql);
            //SELECT [ProductID], [ProductName], ...etc...
            //FROM
            //(SELECT ROW_NUMBER() OVER( ORDER BY [ProductID]) AS
            //rowNumber, [ProductID], [ProductName],  ...etc..
            //FROM [Products]) AS countedTable
            //WHERE rowNumber >= (@pageSize * (@currentPage - 1))
            //AND rowNumber <= (@pageSize * @currentPage)
        }
Пример #10
0
        public void TestGeneratedSqlForPaging()
        {
            //arrange
            var table     = LoadCategoriesFromNorthwind();
            var writer    = new SqlWriter(table, SqlType.SqlServer);
            var sql       = writer.SelectPageSql();
            var factory   = DbProviderFactories.GetFactory(ProviderName);
            var dataTable = new DataTable();

            //run generated sql
            using (var con = factory.CreateConnection())
            {
                con.ConnectionString = ConnectionString;
                using (var cmd = con.CreateCommand())
                {
                    cmd.CommandText = sql;
                    var pageSize = factory.CreateParameter();
                    pageSize.ParameterName = "@pageSize";
                    pageSize.Value         = 4;
                    cmd.Parameters.Add(pageSize);

                    var currentPage = factory.CreateParameter();
                    currentPage.ParameterName = "@currentPage";
                    currentPage.Value         = 1;
                    cmd.Parameters.Add(currentPage);


                    var da = factory.CreateDataAdapter();
                    da.SelectCommand = cmd;
                    da.Fill(dataTable);
                }
            }

            //assert
            Assert.IsTrue(dataTable.Rows.Count > 0, "There should be some categories (this test may fail if database table is empty)");
            foreach (var column in table.Columns)
            {
                var name = column.Name;
                Assert.IsTrue(dataTable.Columns.Contains(name), "Should retrieve column " + name);
            }
        }
Пример #11
0
        public DataTable Read()
        {
            var sqlType = FindSqlType();
            var originSql = new SqlWriter(_databaseTable, sqlType);
            var selectAll = originSql.SelectPageSql();

            var dt = new DataTable(_databaseTable.Name) { Locale = CultureInfo.InvariantCulture };

            var dbFactory = DbProviderFactories.GetFactory(_providerName);
            using (var con = dbFactory.CreateConnection())
            {
                con.ConnectionString = _connectionString;
                using (var cmd = con.CreateCommand())
                {
                    cmd.CommandText = selectAll;
                    var p = cmd.CreateParameter();
                    var parameterName = "currentPage";
                    if (sqlType == SqlType.SqlServerCe) parameterName = "offset";
                    p.ParameterName = parameterName;
                    p.Value = 1;
                    if (sqlType == SqlType.SqlServerCe) p.Value = 0;
                    cmd.Parameters.Add(p);
                    var ps = cmd.CreateParameter();
                    ps.ParameterName = "pageSize";
                    ps.Value = _pageSize;
                    cmd.Parameters.Add(ps);

                    using (var da = dbFactory.CreateDataAdapter())
                    {
                        da.SelectCommand = cmd;
                        da.Fill(dt);
                    }
                }
            }
            return dt;
        }