public void Parse_SalesOrderDetail(string dbPath, int pageID)
        {
            var db     = new RawDataFile(dbPath);
            var page   = db.GetPage(pageID);
            var record = page.Records.First() as RawPrimaryRecord;

            var result = RawColumnParser.Parse(record, new IRawType[] {
                RawType.Int("SalesOrderID"),
                RawType.Int("SalesOrderDetailID"),
                RawType.SmallInt("OrderQty"),
                RawType.Int("ProductID"),
                RawType.Money("UnitPrice"),
                RawType.Money("UnitPriceDiscount"),
                RawType.UniqueIdentifier("rowguid"),
                RawType.DateTime("ModifiedDate")
            });

            Assert.AreEqual(8, ((Dictionary <string, object>)result).Count);
            Assert.AreEqual(71774, result.SalesOrderID);
            Assert.AreEqual(110562, result.SalesOrderDetailID);
            Assert.AreEqual(1, result.OrderQty);
            Assert.AreEqual(836, result.ProductID);
            Assert.AreEqual(356.898, result.UnitPrice);
            Assert.AreEqual(0.00, result.UnitPriceDiscount);
            Assert.AreEqual(new Guid("e3a1994c-7a68-4ce8-96a3-77fdd3bbd730"), result.rowguid);
            Assert.AreEqual(Convert.ToDateTime("2004-06-01"), result.ModifiedDate);
        }
Beispiel #2
0
        public void LeafLevelNonclusteredWithNullBitmapAndVariableLength2012_B()
        {
            var rawBytes = TestHelper.GetBytesFromByteString(@"
				36947500 00020000 01004200 6a006500 73007300
				69006500 30004000 61006400 76006500 6e007400
				75007200 65002d00 77006f00 72006b00 73002e00
				63006f00 6d00
			"            );

            var record = new RawIndexRecord(new ArrayDelimiter <byte>(rawBytes), 5, 0);

            Assert.AreEqual(4, record.FixedLengthData.Count);
            Assert.AreEqual(true, record.HasNullBitmap);
            Assert.AreEqual(true, record.HasVariableLengthColumns);
            Assert.AreEqual(2, record.NullBitmapColumnCount);
            Assert.IsNull(record.ChildPageID);
            Assert.IsNull(record.ChildFileID);

            dynamic row = RawColumnParser.Parse(record, new IRawType[] {
                RawType.NVarchar("EmailAddress"),
                RawType.Int("CustomerID")
            });

            Assert.AreEqual("*****@*****.**", row.EmailAddress);
            Assert.AreEqual(30100, row.CustomerID);
        }
        public void Parse_Address(string dbPath, int pageID)
        {
            var db     = new RawDataFile(dbPath);
            var page   = db.GetPage(pageID);
            var record = page.Records.First() as RawPrimaryRecord;

            var result = RawColumnParser.Parse(record, new IRawType[] {
                RawType.Int("AddressID"),
                RawType.NVarchar("AddressLine1"),
                RawType.NVarchar("AddressLine2"),
                RawType.NVarchar("City"),
                RawType.NVarchar("StateProvince"),
                RawType.NVarchar("CountryRegion"),
                RawType.NVarchar("PostalCode"),
                RawType.UniqueIdentifier("rowguid"),
                RawType.DateTime("ModifiedDate")
            });

            Assert.AreEqual(9, ((Dictionary <string, object>)result).Count);
            Assert.AreEqual(9, result.AddressID);
            Assert.AreEqual("8713 Yosemite Ct.", result.AddressLine1);
            Assert.AreEqual(null, result.AddressLine2);
            Assert.AreEqual("Bothell", result.City);
            Assert.AreEqual("Washington", result.StateProvince);
            Assert.AreEqual("United States", result.CountryRegion);
            Assert.AreEqual("98011", result.PostalCode);
            Assert.AreEqual(new Guid("268af621-76d7-4c78-9441-144fd139821a"), result.rowguid);
            Assert.AreEqual(new DateTime(2002, 07, 01), result.ModifiedDate);
        }
        public void sysschobjs()
        {
            var db    = new RawDataFile(AW2012Path);
            var pages = db.Pages.Where(x => x.Header.ObjectID == SQL2012Sysschobjs.ObjectID && x.Header.Type == PageType.Data);
            var rows  = RawColumnParser.Parse(pages, SQL2012Sysschobjs.Schema).Select(SQL2012Sysschobjs.Row).ToList();

            // Aggregates
            Assert.AreEqual(2291, rows.Count);
            Assert.AreEqual(48296, (int)rows.Average(x => x.status));
            Assert.AreEqual(-394768470, (long)rows.Average(x => x.id));

            // Individual rows
            var testRow = rows.Single(x => x.id == -93184835);

            Assert.AreEqual("sp_helpsrvrolemember", testRow.name);
            Assert.AreEqual(Convert.ToDateTime("2011-11-04 21:12:23.257"), testRow.created);

            testRow = rows.Single(x => x.id == 60);
            Assert.AreEqual("sysobjvalues", testRow.name);
            Assert.AreEqual(Convert.ToDateTime("2008-07-09 16:20:00.633"), testRow.modified);

            testRow = rows.Single(x => x.id == 1977058079);
            Assert.AreEqual("QueryNotificationErrorsQueue", testRow.name);
            Assert.AreEqual(Convert.ToDateTime("2008-07-09 16:20:00.913"), testRow.created);
        }
Beispiel #5
0
        public void Regression_EmptyVariableLengthValuePerceivedAsNull()
        {
            var rawBytes = TestHelper.GetBytesFromByteString(@"
				10002d00 d637b35f 01000000 0000e7e7 0000001e
				00000008 d0003400 02000000 00000000 00000000
				00000000 00100000 80
			"            );

            var record = new RawPrimaryRecord(new ArrayDelimiter <byte>(rawBytes));
            var row    = RawColumnParser.Parse(record, SQL2012Syscolpars.Schema);

            Assert.IsNotNull(row.name);
        }
        public void Parse_SalesOrderHeader(string dbPath, int pageID, int customerID)
        {
            var db     = new RawDataFile(dbPath);
            var page   = db.GetPage(pageID);
            var record = page.Records.First() as RawPrimaryRecord;

            var result = RawColumnParser.Parse(record, new IRawType[] {
                RawType.Int("SalesOrderID"),
                RawType.TinyInt("RevisionNumber"),
                RawType.DateTime("OrderDate"),
                RawType.DateTime("DueDate"),
                RawType.DateTime("ShipDate"),
                RawType.TinyInt("Status"),
                RawType.Bit("OnlineOrderFlag"),
                RawType.NVarchar("PurchaseOrderNumber"),
                RawType.NVarchar("AccountNumber"),
                RawType.Int("CustomerID"),
                RawType.Int("ShipToAddressID"),
                RawType.Int("BillToAddressID"),
                RawType.NVarchar("ShipMethod"),
                RawType.Varchar("CreditCardApprovalCode"),
                RawType.Money("SubTotal"),
                RawType.Money("TaxAmt"),
                RawType.Money("Freight"),
                RawType.NVarchar("Comment"),
                RawType.UniqueIdentifier("rowguid"),
                RawType.DateTime("ModifiedDate")
            });

            Assert.AreEqual(20, ((Dictionary <string, object>)result).Count);
            Assert.AreEqual(71774, result.SalesOrderID);
            Assert.AreEqual(1, result.RevisionNumber);
            Assert.AreEqual(Convert.ToDateTime("2004-06-01"), result.OrderDate);
            Assert.AreEqual(Convert.ToDateTime("2004-06-13"), result.DueDate);
            Assert.AreEqual(Convert.ToDateTime("2004-06-08"), result.ShipDate);
            Assert.AreEqual(5, result.Status);
            Assert.AreEqual(false, result.OnlineOrderFlag);
            Assert.AreEqual("PO348186287", result.PurchaseOrderNumber);
            Assert.AreEqual("10-4020-000609", result.AccountNumber);
            Assert.AreEqual(customerID, result.CustomerID);
            Assert.AreEqual(1092, result.ShipToAddressID);
            Assert.AreEqual(1092, result.BillToAddressID);
            Assert.AreEqual("CARGO TRANSPORT 5", result.ShipMethod);
            Assert.AreEqual(null, result.CreditCardApprovalCode);
            Assert.AreEqual(880.3484, result.SubTotal);
            Assert.AreEqual(70.4279, result.TaxAmt);
            Assert.AreEqual(22.0087, result.Freight);
            Assert.AreEqual(null, result.Comment);
            Assert.AreEqual(new Guid("89e42cdc-8506-48a2-b89b-eb3e64e3554e"), result.rowguid);
            Assert.AreEqual(Convert.ToDateTime("2004-06-08"), result.ModifiedDate);
        }
        public void Parse_Product(string dbPath, int pageID)
        {
            var db     = new RawDataFile(dbPath);
            var page   = db.GetPage(pageID);
            var record = page.Records.First() as RawPrimaryRecord;

            var result = RawColumnParser.Parse(record, new IRawType[] {
                RawType.Int("ProductID"),
                RawType.NVarchar("Name"),
                RawType.NVarchar("ProductNumber"),
                RawType.NVarchar("Color"),
                RawType.Money("StandardCost"),
                RawType.Money("ListPrice"),
                RawType.NVarchar("Size"),
                RawType.Decimal("Weight", 8, 2),
                RawType.Int("ProductCategoryID"),
                RawType.Int("ProductModelID"),
                RawType.DateTime("SellStartDate"),
                RawType.DateTime("SellEndDate"),
                RawType.DateTime("DiscontinuedDate"),
                RawType.VarBinary("ThumbNailPhoto"),
                RawType.NVarchar("ThumbnailPhotoFileName"),
                RawType.UniqueIdentifier("rowguid"),
                RawType.DateTime("ModifiedDate")
            });

            Assert.AreEqual(17, ((Dictionary <string, object>)result).Count);
            Assert.AreEqual(680, result.ProductID);
            Assert.AreEqual("HL Road Frame - Black, 58", result.Name);
            Assert.AreEqual("FR-R92B-58", result.ProductNumber);
            Assert.AreEqual("Black", result.Color);
            Assert.AreEqual(1059.31, result.StandardCost);
            Assert.AreEqual(1431.50, result.ListPrice);
            Assert.AreEqual("58", result.Size);
            Assert.AreEqual(1016.04, result.Weight);
            Assert.AreEqual(18, result.ProductCategoryID);
            Assert.AreEqual(6, result.ProductModelID);
            Assert.AreEqual(Convert.ToDateTime("1998-06-01"), result.SellStartDate);
            Assert.AreEqual(null, result.SellEndDate);
            Assert.AreEqual(null, result.DiscontinuedDate);
            Assert.AreEqual(1077, result.ThumbNailPhoto.Length);
            Assert.AreEqual("no_image_available_small.gif", result.ThumbnailPhotoFileName);
            Assert.AreEqual(new Guid("43dd68d6-14a4-461f-9069-55309d90ea7e"), result.rowguid);
            Assert.AreEqual(Convert.ToDateTime("2004-03-11 10:01:36.827"), result.ModifiedDate);
        }
        public void Parse_ProductDescription(string dbPath, int pageID)
        {
            var db     = new RawDataFile(dbPath);
            var page   = db.GetPage(pageID);
            var record = page.Records.First() as RawPrimaryRecord;

            var result = RawColumnParser.Parse(record, new IRawType[] {
                RawType.Int("ProductDescriptionID"),
                RawType.NVarchar("Description"),
                RawType.UniqueIdentifier("rowguid"),
                RawType.DateTime("ModifiedDate")
            });

            Assert.AreEqual(4, ((Dictionary <string, object>)result).Count);
            Assert.AreEqual(3, result.ProductDescriptionID);
            Assert.AreEqual("Chromoly steel.", result.Description);
            Assert.AreEqual(new Guid("301eed3a-1a82-4855-99cb-2afe8290d641"), result.rowguid);
            Assert.AreEqual(Convert.ToDateTime("2003-06-01"), result.ModifiedDate);
        }
        public void Parse_BuildVersion(string dbPath, int pageID, string databaseVersion, string versionDate)
        {
            var db     = new RawDataFile(dbPath);
            var page   = db.GetPage(pageID);
            var record = page.Records.First() as RawPrimaryRecord;

            var result = RawColumnParser.Parse(record, new IRawType[] {
                RawType.TinyInt("SystemInformationID"),
                RawType.NVarchar("Database Version"),
                RawType.DateTime("VersionDate"),
                RawType.DateTime("ModifiedDate")
            });

            Assert.AreEqual(4, ((Dictionary <string, object>)result).Count);
            Assert.AreEqual(1, result.SystemInformationID);
            Assert.AreEqual(databaseVersion, ((Dictionary <string, object>)result)["Database Version"]);
            Assert.AreEqual(Convert.ToDateTime(versionDate), result.VersionDate);
            Assert.AreEqual(Convert.ToDateTime(versionDate), result.ModifiedDate);
        }
        public void Parse_Customer(string dbPath, int pageID, string modifiedDate)
        {
            var db     = new RawDataFile(dbPath);
            var page   = db.GetPage(pageID);
            var record = page.Records.First() as RawPrimaryRecord;

            var result = RawColumnParser.Parse(record, new IRawType[] {
                RawType.Int("CustomerID"),
                RawType.Bit("NameStyle"),
                RawType.NVarchar("Title"),
                RawType.NVarchar("FirstName"),
                RawType.NVarchar("MiddleName"),
                RawType.NVarchar("LastName"),
                RawType.NVarchar("Suffix"),
                RawType.NVarchar("CompanyName"),
                RawType.NVarchar("SalesPerson"),
                RawType.NVarchar("EmailAddress"),
                RawType.NVarchar("Phone"),
                RawType.Varchar("PasswordHash"),
                RawType.Varchar("PasswordSalt"),
                RawType.UniqueIdentifier("rowguid"),
                RawType.DateTime("ModifiedDate")
            });

            Assert.AreEqual(15, ((Dictionary <string, object>)result).Count);
            Assert.AreEqual(1, result.CustomerID);
            Assert.AreEqual(false, result.NameStyle);
            Assert.AreEqual("Mr.", result.Title);
            Assert.AreEqual("Orlando", result.FirstName);
            Assert.AreEqual("N.", result.MiddleName);
            Assert.AreEqual("Gee", result.LastName);
            Assert.AreEqual(null, result.Suffix);
            Assert.AreEqual("A Bike Store", result.CompanyName);
            Assert.AreEqual(@"adventure-works\pamela0", result.SalesPerson);
            Assert.AreEqual("*****@*****.**", result.EmailAddress);
            Assert.AreEqual("245-555-0173", result.Phone);
            Assert.AreEqual("L/Rlwxzp4w7RWmEgXX+/A7cXaePEPcp+KwQhl2fJL7w=", result.PasswordHash);
            Assert.AreEqual("1KjXYs4=", result.PasswordSalt);
            Assert.AreEqual(new Guid("3f5ae95e-b87d-4aed-95b4-c3797afcb74f"), result.rowguid);
            Assert.AreEqual(Convert.ToDateTime(modifiedDate), result.ModifiedDate);
        }
        public void Parse_ProductModelProductDescription(string dbPath, int pageID, string rowguid)
        {
            var db     = new RawDataFile(dbPath);
            var page   = db.GetPage(pageID);
            var record = page.Records.First() as RawPrimaryRecord;

            var result = RawColumnParser.Parse(record, new IRawType[] {
                RawType.Int("ProductModelID"),
                RawType.Int("ProductDescriptionID"),
                RawType.NChar("Culture", 6),
                RawType.UniqueIdentifier("rowguid"),
                RawType.DateTime("ModifiedDate")
            });

            Assert.AreEqual(5, ((Dictionary <string, object>)result).Count);
            Assert.AreEqual(1, result.ProductModelID);
            Assert.AreEqual(1199, result.ProductDescriptionID);
            Assert.AreEqual("en".PadRight(6, ' '), result.Culture);
            Assert.AreEqual(new Guid(rowguid), result.rowguid);
            Assert.AreEqual(Convert.ToDateTime("2003-06-01"), result.ModifiedDate);
        }
        public void Parse_ProductModel(string dbPath, int pageID)
        {
            var db     = new RawDataFile(dbPath);
            var page   = db.GetPage(pageID);
            var record = page.Records.First() as RawPrimaryRecord;

            var result = RawColumnParser.Parse(record, new IRawType[] {
                RawType.Int("ProductModelID"),
                RawType.NVarchar("Name"),
                RawType.Xml("CatalogDescription"),
                RawType.UniqueIdentifier("rowguid"),
                RawType.DateTime("ModifiedDate")
            });

            Assert.AreEqual(5, ((Dictionary <string, object>)result).Count);
            Assert.AreEqual(1, result.ProductModelID);
            Assert.AreEqual("Classic Vest", result.Name);
            Assert.AreEqual(null, result.CatalogDescription);
            Assert.AreEqual(new Guid("29321d47-1e4c-4aac-887c-19634328c25e"), result.rowguid);
            Assert.AreEqual(Convert.ToDateTime("2003-06-01"), result.ModifiedDate);
        }
        public void Parse_ProductCategory(string dbPath, int pageID)
        {
            var db     = new RawDataFile(dbPath);
            var page   = db.GetPage(pageID);
            var record = page.Records.First() as RawPrimaryRecord;

            var result = RawColumnParser.Parse(record, new IRawType[] {
                RawType.Int("ProductCategoryID"),
                RawType.Int("ParentProductCategoryID"),
                RawType.NVarchar("Name"),
                RawType.UniqueIdentifier("rowguid"),
                RawType.DateTime("ModifiedDate")
            });

            Assert.AreEqual(5, ((Dictionary <string, object>)result).Count);
            Assert.AreEqual(1, result.ProductCategoryID);
            Assert.AreEqual(null, result.ParentProductCategoryID);
            Assert.AreEqual("Bikes", result.Name);
            Assert.AreEqual(new Guid("cfbda25c-df71-47a7-b81b-64ee161aa37c"), result.rowguid);
            Assert.AreEqual(Convert.ToDateTime("1998-06-01"), result.ModifiedDate);
        }
        public void Parse_CustomerAddress(string dbPath, int pageID, int customerID, int addressID, string rowguid, string modifiedDate)
        {
            var db     = new RawDataFile(dbPath);
            var page   = db.GetPage(pageID);
            var record = page.Records.First() as RawPrimaryRecord;

            var result = RawColumnParser.Parse(record, new IRawType[] {
                RawType.Int("CustomerID"),
                RawType.Int("AddressID"),
                RawType.NVarchar("AddressType"),
                RawType.UniqueIdentifier("rowguid"),
                RawType.DateTime("ModifiedDate")
            });

            Assert.AreEqual(5, ((Dictionary <string, object>)result).Count);
            Assert.AreEqual(customerID, result.CustomerID);
            Assert.AreEqual(addressID, result.AddressID);
            Assert.AreEqual("Main Office", result.AddressType);
            Assert.AreEqual(new Guid(rowguid), result.rowguid);
            Assert.AreEqual(Convert.ToDateTime(modifiedDate), result.ModifiedDate);
        }
Beispiel #15
0
        private void loadRawTable(string table)
        {
            try
            {
                var rawTable = rawtables
                               .Where(x => x.name == table).First();

                var rawSchema = RawTablesSchemas[table];

                var records = dbf.Pages
                              .Where(x => x.Header.ObjectID == rawTable.id && x.Header.Type == PageType.Data)
                              .SelectMany(x => x.Records);

                var rawRows = records.Select(x => RawColumnParser.Parse((RawRecord)x, rawSchema));

                showrawRows(rawRows, rawSchema);
            }
            catch (Exception ex)
            {
                logException(ex);
            }
        }
Beispiel #16
0
        public void BranchLevelNonClusteredWithNullBitmapAndVariableLength2012_SecondRecord()
        {
            var rawBytes = TestHelper.GetBytesFromByteString(@"
				36d90000 00780200 00010002 00000100 46006300
				68007200 69007300 36004000 61006400 76006500
				6e007400 75007200 65002d00 77006f00 72006b00
				73002e00 63006f00 6d00
			"            );

            var record = new RawIndexRecord(new ArrayDelimiter <byte>(rawBytes), 11, 1);

            Assert.AreEqual(1, record.ChildFileID);
            Assert.AreEqual(632, record.ChildPageID);

            dynamic row = RawColumnParser.Parse(record, new IRawType[] {
                RawType.NVarchar("EmailAddress"),
                RawType.Int("CustomerID")
            });

            Assert.AreEqual("*****@*****.**", row.EmailAddress);
            Assert.AreEqual(217, row.CustomerID);
        }
Beispiel #17
0
        public void sysallocunits()
        {
            var db    = new RawDataFile(AW2012Path);
            var pages = db.Pages.Where(x => x.Header.ObjectID == SQL2012Sysallocunits.ObjectID && x.Header.Type == PageType.Data);
            var rows  = RawColumnParser.Parse(pages, SQL2012Sysallocunits.Schema).Select(SQL2012Sysallocunits.Row).ToList();

            // Aggregates
            Assert.AreEqual(181, rows.Count);
            Assert.AreEqual(27335730062154916, (long)rows.Average(x => x.auid));
            Assert.AreEqual(3, (int)rows.Average(x => x.pcdata));

            // Individual rows
            var testRow = rows.Single(x => x.auid == 562949958533120);

            Assert.AreEqual(562949958533120, testRow.ownerid);
            Assert.AreEqual(0, testRow.pcdata);

            testRow = rows.Single(x => x.auid == 196608);
            Assert.AreEqual(1, testRow.type);
            Assert.AreEqual(17, testRow.pcreserved);
            Assert.AreEqual(13, testRow.pcused);
            Assert.AreEqual(new byte[] { 0x57, 0x00, 0x00, 0x00, 0x01, 0x00 }, testRow.pgroot);
        }
Beispiel #18
0
        public void syscolpars()
        {
            var db    = new RawDataFile(AW2012Path);
            var pages = db.Pages.Where(x => x.Header.ObjectID == SQL2012Syscolpars.ObjectID && x.Header.Type == PageType.Data);
            var rows  = RawColumnParser.Parse(pages, SQL2012Syscolpars.Schema).Select(SQL2012Syscolpars.Row).ToList();

            // Aggregates
            Assert.AreEqual(860, rows.Count);
            Assert.AreEqual(317769461, (int)rows.Average(x => x.id));
            Assert.AreEqual(105, (int)rows.Average(x => x.xtype));
            Assert.AreEqual(8, (int)rows.Average(x => x.name.Length));

            // Individual rows
            var testRow = rows.Single(x => x.id == 25 && x.colid == 12);

            Assert.AreEqual("bXVTDocidUseBaseT", testRow.name);
            Assert.AreEqual(48, testRow.utype);

            testRow = rows.Single(x => x.id == 73 && x.colid == 13);
            Assert.AreEqual("enddlgseq", testRow.name);
            Assert.AreEqual(127, testRow.utype);
            Assert.AreEqual(null, testRow.idtval);
        }
        public void sysrowsets()
        {
            var db    = new RawDataFile(AW2012Path);
            var pages = db.Pages.Where(x => x.Header.ObjectID == SQL2012Sysrowsets.ObjectID && x.Header.Type == PageType.Data);
            var rows  = RawColumnParser.Parse(pages, SQL2012Sysrowsets.Schema).Select(SQL2012Sysrowsets.Row).ToList();

            // Aggregates
            Assert.AreEqual(158, rows.Count);
            Assert.AreEqual(72057594041729024, rows.Max(x => x.rowsetid));
            Assert.AreEqual(196608, rows.Min(x => x.rowsetid));
            Assert.AreEqual(20827366792640280, (long)rows.Average(x => x.rowsetid));
            Assert.AreEqual(7662, (long)rows.Average(x => x.status));
            Assert.AreEqual(2266, (long)rows.Average(x => x.maxleaf));

            // Individual rows
            var testRow = rows.Single(x => x.rowsetid == 562949954535424);

            Assert.AreEqual(70, testRow.status);
            Assert.AreEqual(534, testRow.maxint);

            testRow = rows.Single(x => x.rowsetid == 72057594039697408);
            Assert.AreEqual(117575457, testRow.idmajor);
            Assert.AreEqual(1453, testRow.maxleaf);
        }
Beispiel #20
0
        private void openToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            var result = openDatabaseDialog.ShowDialog();

            file = "";

            if (result == DialogResult.OK)
            {
                try
                {
                    var files = openDatabaseDialog.FileNames;
                    file = files[0];
                    db   = new Database(files);

                    refreshTreeview();
                } catch (Exception ex)
                {
                    logException(ex);

                    try
                    {
                        dbf = new RawDataFile(file);

                        var records = dbf.Pages
                                      .Where(x => x.Header.ObjectID == 34 && x.Header.Type == PageType.Data)
                                      .SelectMany(x => x.Records);

                        var rows = records.Select(x => RawColumnParser.Parse((RawRecord)x, new IRawType[] {
                            RawType.Int("id"),
                            RawType.NVarchar("name"),
                            RawType.Int("nsid"),
                            RawType.TinyInt("nsclass"),
                            RawType.Int("status"),
                            RawType.Char("type", 2),
                            RawType.Int("pid"),
                            RawType.TinyInt("pclass"),
                            RawType.Int("intprop"),
                            RawType.DateTime("created"),
                            RawType.DateTime("modified")
                        }));

                        rawtables = rows
                                    .Where(x => x.GetColumnValue("type").ToString().Trim() == "U");

                        rawrefreshTreeview();
                    }
                    catch (Exception rawex)
                    {
                        logException(rawex);

                        try
                        {
                            var bestdbf = new RawDataFile(file);

                            var SysschobjsPages = bestdbf.Pages
                                                  .Where(x => x.Header.ObjectID == 34 && x.Header.Type == PageType.Data);

                            var bestRecords = RawColumnParser.BestEffortParse(SysschobjsPages, new IRawType[] {
                                RawType.Int("id"),
                                RawType.NVarchar("name"),
                                RawType.Int("nsid"),
                                RawType.TinyInt("nsclass"),
                                RawType.Int("status"),
                                RawType.Char("type", 2),
                                RawType.Int("pid"),
                                RawType.TinyInt("pclass"),
                                RawType.Int("intprop"),
                                RawType.DateTime("created"),
                                RawType.DateTime("modified")
                            });

                            rawtables = bestRecords
                                        .Where(x => x.GetColumnValue("type").ToString().Trim() == "U");

                            var syscolparspages   = bestdbf.Pages.Where(x => x.Header.ObjectID == 41 && x.Header.Type == PageType.Data);
                            var syscolparsrecords = syscolparspages.SelectMany(x => x.Records).Select(x => (RawPrimaryRecord)x);
                            var syscolparsrows    = RawColumnParser.BestEffortParse(syscolparspages, new IRawType[] {
                                RawType.Int("id"),
                                RawType.SmallInt("number"),
                                RawType.Int("colid"),
                                RawType.NVarchar("name"),
                                RawType.TinyInt("xtype"),
                                RawType.Int("utype"),
                                RawType.SmallInt("length"),
                                RawType.TinyInt("prec"),
                                RawType.TinyInt("scale"),
                                RawType.Int("collationid"),
                                RawType.Int("status"),
                                RawType.SmallInt("maxinrow"),
                                RawType.Int("xmlns"),
                                RawType.Int("dflt"),
                                RawType.Int("chk"),
                                RawType.VarBinary("idtval")
                            });

                            rawcolumns = syscolparsrows.Select(x => new
                            {
                                ObjectID = (int?)x.GetColumnValue("id"),
                                ColumnID = (int?)x.GetColumnValue("colid"),
                                Number   = (short?)x.GetColumnValue("number"),
                                TypeID   = (byte?)x.GetColumnValue("xtype"),
                                Length   = (short?)x.GetColumnValue("length"),
                                Name     = x.GetColumnValue("name")
                            });

                            rawrefreshTreeview();
                        }
                        catch (Exception bestrawex)
                        {
                            logException(bestrawex);
                        }
                    }
                }
            }
        }