Exemple #1
0
        public void checkLongCharLengthWithClipper()
        {
            var    fieldLength = 750;
            string writtenValue;

            using (
                Stream fos =
                    File.Open(TestClipLongPath(),
                              FileMode.OpenOrCreate,
                              FileAccess.ReadWrite))
            {
                var writer = new DBFWriter();
                var field  = new DBFField("F1", NativeDbType.Char, fieldLength);
                writer.Fields = new[] { field };

                writtenValue = GetCharacters(fieldLength);
                writer.AddRecord(writtenValue);
                writer.Write(fos);
            }
            using (
                Stream fis =
                    File.Open(TestClipLongPath(),
                              FileMode.OpenOrCreate,
                              FileAccess.ReadWrite))
            {
                var reader = new DBFReader(fis);
                Assert.That(reader.Fields.First().FieldLength, EqualTo(fieldLength));
                var readValues = reader.NextRecord();

                Assert.That(readValues[0], EqualTo(writtenValue), "Written Value not equaling Read");
            }
        }
Exemple #2
0
        public void checkDataType_M()
        {
            var       fieldLength = 2400;
            MemoValue writtenValue;

            using (Stream fos = File.Open(TestMemoPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite))
                using (var writer = new DBFWriter
                {
                    DataMemoLoc = Path.ChangeExtension(TestMemoPath(), "DBT")
                })
                {
                    var field = new DBFField("F1", NativeDbType.Memo);
                    writer.Fields = new[] { field };

                    writtenValue = new MemoValue(GetCharacters(fieldLength));
                    writer.AddRecord(writtenValue);
                    writer.Write(fos);
                }
            using (Stream fis = File.Open(TestMemoPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite))
                using (var reader = new DBFReader(fis)
                {
                    DataMemoLoc = Path.ChangeExtension(TestMemoPath(), "DBT")
                })
                {
                    var readValues = reader.NextRecord();

                    Assert.That(readValues[0], EqualTo(writtenValue), "Written Value not equaling Read");
                }
        }
Exemple #3
0
        public void checkDataType_N()
        {
            Decimal writtenValue;

            using (
                Stream fos =
                    File.Open(TestPath(),
                              FileMode.OpenOrCreate,
                              FileAccess.ReadWrite))
                using (var writer = new DBFWriter())
                {
                    var field = new DBFField("F1", NativeDbType.Numeric, 15, 0);
                    writer.Fields = new[] { field };

                    writtenValue = 123456789012345L;
                    writer.AddRecord(writtenValue);
                    writer.Write(fos);
                }
            using (
                Stream fis =
                    File.Open(TestPath(),
                              FileMode.Open,
                              FileAccess.Read))
                using (var reader = new DBFReader(fis))
                {
                    var readValues = reader.NextRecord();

                    Assert.That(readValues[0], EqualTo(writtenValue), "Written Value Equals Read");
                }
        }
Exemple #4
0
        public void checkRAFwriting()
        {
            println("Writing in RAF mode ... ");

            if (File.Exists(TestRAFPath()))
            {
                File.Delete(TestRAFPath());
            }
            using (var writer = new DBFWriter(TestRAFPath()))
            {
                var fields = new DBFField[2];

                fields[0] = new DBFField("F1", NativeDbType.Char, 10);

                fields[1] = new DBFField("F2", NativeDbType.Numeric, 2);

                writer.Fields = fields;


                writer.WriteRecord("Red", 10);
                writer.WriteRecord("Blue", 20);
            }

            println("done.");

            println("Appending to this file");

            using (var writer = new DBFWriter(TestRAFPath()))
            {
                writer.WriteRecord("Green", 33);

                writer.WriteRecord("Yellow", 44);
            }
            println("done.");
        }
Exemple #5
0
        public static object[] GetFields()
        {
            var fDocnum = new DBFField {
                Name = "docnum", DataType = NativeDbType.Char, FieldLength = 12
            };
            var fEmail = new DBFField {
                Name = "email", DataType = NativeDbType.Char, FieldLength = 50
            };
            var fStatus = new DBFField {
                Name = "status", DataType = NativeDbType.Char, FieldLength = 1
            };

            return(new[] { fDocnum, fEmail, fStatus });
        }
Exemple #6
0
        public void WriteSample([CallerMemberName] string name = null)
        {
            var field = new DBFField {
                Name = "F1", DataType = NativeDbType.Numeric
            };
            var writer = new DBFWriter {
                Fields = new[] { field }
            };

            writer.AddRecord(3);
            using (
                Stream fos =
                    File.Open(TestPath(name),
                              FileMode.OpenOrCreate,
                              FileAccess.ReadWrite))
            {
                writer.Write(fos);
            }
        }
Exemple #7
0
        public void checkProxy()
        {
            var    fieldLength = 2400;
            string writtenValue;

            using (
                Stream fos =
                    File.Open(TestSelectPath(),
                              FileMode.OpenOrCreate,
                              FileAccess.ReadWrite))
            {
                using (var writer = new DBFWriter {
                    DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
                })
                {
                    ;
                    var field  = new DBFField("F1", NativeDbType.Memo);
                    var field2 = new DBFField("F2", NativeDbType.Numeric, 10);
                    var field3 = new DBFField("F3", NativeDbType.Char, 10);
                    writer.Fields = new[] { field, field2, field3 };

                    writtenValue = "alpha";
                    writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue);
                    writer.Write(fos);
                }
            }
            using (
                Stream fis =
                    File.Open(TestSelectPath(),
                              FileMode.OpenOrCreate,
                              FileAccess.ReadWrite))
            {
                using (var reader = new DBFReader(fis)
                {
                    DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
                })
                {
                    var readValues = reader.AllRecords <ITestInterface>();

                    Assert.That(readValues.First().F3, StartsWith(writtenValue), "Written Value not equaling Read");
                }
            }
        }
Exemple #8
0
        public void checkSelectDynamic()
        {
            var    fieldLength = 2400;
            string writtenValue;
            string writtenMemo;

            using (
                Stream fos =
                    File.Open(TestSelectPath(),
                              FileMode.OpenOrCreate,
                              FileAccess.ReadWrite))
                using (var writer = new DBFWriter
                {
                    DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
                })
                {
                    var field  = new DBFField("F1", NativeDbType.Memo);
                    var field2 = new DBFField("F2", NativeDbType.Numeric, 10);
                    var field3 = new DBFField("F3", NativeDbType.Char, 10);
                    writer.Fields = new[] { field, field2, field3 };

                    writtenValue = "alpha";
                    writtenMemo  = GetCharacters(fieldLength);
                    writer.AddRecord(new MemoValue(writtenMemo), 10, writtenValue);
                    writer.Write(fos);
                }
            using (
                Stream fis =
                    File.Open(TestSelectPath(),
                              FileMode.OpenOrCreate,
                              FileAccess.ReadWrite))
                using (var reader = new DBFReader(fis)
                {
                    DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
                })
                {
                    reader.SetSelectFields("F1", "F3");
                    var readValues = reader.DynamicAllRecords().First();

                    Assert.That(readValues.F1.ToString(), EqualTo(writtenMemo), "Written Value not equaling Read");
                    Assert.That(readValues.F3, EqualTo(writtenValue), "Written Value not equaling Read");
                }
        }
Exemple #9
0
        public void checkDynamicProxyWhere()
        {
            var    fieldLength = 2400;
            string writtenValue;

            using (
                Stream fos =
                    File.Open(TestSelectPath(),
                              FileMode.OpenOrCreate,
                              FileAccess.ReadWrite))
                using (var writer = new DBFWriter
                {
                    DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
                })
                {
                    var field  = new DBFField("F1", NativeDbType.Memo);
                    var field2 = new DBFField("F2", NativeDbType.Numeric, 10);
                    var field3 = new DBFField("F3", NativeDbType.Char, 10);
                    writer.Fields = new[] { field, field2, field3 };

                    writtenValue = "alpha";
                    writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue);

                    writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 12, "beta");

                    writer.Write(fos);
                }

            using (var reader = new DBFReader(TestSelectPath())
            {
                DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
            })
            {
                var readValues = reader.DynamicAllRecords();

                Assert.That(Equals(readValues.Count(), 2), "All Records not matching");
            }

            using (var reader = new DBFReader(TestSelectPath())
            {
                DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
            })
            {
                var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 10);

                Assert.That(Equals(readValues.Count(), 1), "All Records not matching");
            }

            using (var reader = new DBFReader(TestSelectPath())
            {
                DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
            })
            {
                var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 12);

                Assert.That(Equals(readValues.Count(), 1), "All Records not matching");
            }
            using (var reader = new DBFReader(TestSelectPath())
            {
                DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
            })
            {
                var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 13);

                Assert.That(Equals(readValues.Count(), 0), "All Records not matching");
            }
        }
Exemple #10
0
        private void ExportData()
        {
            var fileName = Project.Current.MapPath(FileName);

            if (string.IsNullOrWhiteSpace(fileName))
            {
                throw new ArgumentNullException("Filename is not provided.");
            }

            if (!Overwrite && File.Exists(fileName))
            {
                throw new Exception($"File '{FileName}' already exists.");
            }

            if (Overwrite && File.Exists(fileName))
            {
                File.Delete(fileName);
            }

            using var stream     = new FileStream(fileName, FileMode.CreateNew, FileAccess.Write);
            using var dataReader = GetDataSourceReader(_Output, DataSource,
                                                       new DataSourceParameters()
            {
                IgnoreErrors = this.IgnoreErrors, Columns = this.SelectColumns, SkipColumns = this.SkipColumns
            });

            var writer      = new DBFWriter(stream);
            var dbFields    = new List <DBFField>();
            int columnCount = dataReader.FieldCount;

            var schema = dataReader.GetSchemaTable();

            for (int i = 0; i < columnCount; i++)
            {
                var fieldName = dataReader.GetName(i) ?? string.Empty;
                var name      = fieldName.Length <= 10 ? fieldName : fieldName.Substring(0, 10);
                var type      = dataReader.GetFieldType(i);

                DBFField dbField = null;
                switch (Type.GetTypeCode(type))
                {
                case TypeCode.Empty:
                case TypeCode.Object:
                case TypeCode.DBNull:
                    throw new Exception($"Type '{type.FullName}' cannot be exported into DBF.");

                case TypeCode.Boolean:
                    dbField = new DBFField(name, NativeDbType.Logical);
                    break;

                case TypeCode.Char:
                    int charSize = GetColumnMaxLength(name);
                    dbField = new DBFField(name, NativeDbType.Char, charSize);
                    break;

                case TypeCode.SByte:
                    dbField = new DBFField(name, NativeDbType.Numeric, 5);
                    break;

                case TypeCode.Byte:
                    dbField = new DBFField(name, NativeDbType.Numeric, 5);
                    break;

                case TypeCode.Int16:
                    dbField = new DBFField(name, NativeDbType.Numeric, 6);
                    break;

                case TypeCode.UInt16:
                    dbField = new DBFField(name, NativeDbType.Numeric, 6);
                    break;

                case TypeCode.Int32:
                    dbField = new DBFField(name, NativeDbType.Numeric, 12);
                    break;

                case TypeCode.UInt32:
                    dbField = new DBFField(name, NativeDbType.Numeric, 12);
                    break;

                case TypeCode.Int64:
                    dbField = new DBFField(name, NativeDbType.Numeric, 19);
                    break;

                case TypeCode.UInt64:
                    dbField = new DBFField(name, NativeDbType.Numeric, 19);
                    break;

                case TypeCode.Single:
                    dbField = new DBFField(name, NativeDbType.Float, 19, 4);
                    break;

                case TypeCode.Double:
                    dbField = new DBFField(name, NativeDbType.Float, 19, 4);
                    break;

                case TypeCode.Decimal:
                    dbField = new DBFField(name, NativeDbType.Float, 19, 4);
                    break;

                case TypeCode.DateTime:
                    dbField = new DBFField(name, NativeDbType.Date);
                    break;

                case TypeCode.String:
                    int strSize = GetColumnMaxLength(fieldName);
                    dbField = new DBFField(name, NativeDbType.Char, strSize);
                    break;
                }

                dbFields.Add(dbField);
            }

            writer.Fields = dbFields.ToArray();

            object[] values  = new object[columnCount];
            int[]    lengths = new int[columnCount];

            for (int i = 0; i < writer.Fields.Length; i++)
            {
                lengths[i] = writer.Fields[i].FieldLength;
            }

            while (dataReader.Read())
            {
                for (int i = 0; i < columnCount; i++)
                {
                    object value = dataReader.GetValue(i);
                    if (value is string str && str.Length > lengths[i])
                    {
                        value = str.Substring(0, lengths[i]);
                    }

                    values[i] = value;
                }

                writer.WriteRecord(values);
            }


            int GetColumnMaxLength(string columnName)
            {
                const int DefaultStringColumnSize = 254;

                if (schema == null || schema.Rows.Count <= 0)
                {
                    return(DefaultStringColumnSize);
                }

                if (schema.Columns["ColumnName"] == null || schema.Columns["ColumnSize"] == null)
                {
                    return(DefaultStringColumnSize);
                }

                foreach (DataRow row in schema.Rows)
                {
                    var colName = Convert.ToString(row["ColumnName"]);
                    if (string.Compare(colName, columnName, true) == 0)
                    {
                        int size = Convert.ToInt32(row["ColumnSize"]);
                        if (size > 0 && size <= DefaultStringColumnSize)
                        {
                            return(size);
                        }
                        return(DefaultStringColumnSize);
                    }
                }

                return(DefaultStringColumnSize);
            }
        }