using System; using System.ComponentModel; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.Common; using System.IO; using System.Net; using FastReport.Utils; using System.Globalization; using System.Collections; namespace FastReport.Data { /// /// Represents a connection to csv file-based database. /// /// This example shows how to add a new connection to the report. /// /// Report report1; /// CsvDataConnection conn = new CsvDataConnection(); /// conn.CsvFile = @"c:\data.csv"; /// report1.Dictionary.Connections.Add(conn); /// conn.CreateAllTables(); /// /// public partial class CsvDataConnection : DataConnectionBase { #region Fields #endregion Fields #region Properties /// /// Gets or sets the path to .csv file. /// [Category("Data")] public string CsvFile { get { CsvConnectionStringBuilder builder = new CsvConnectionStringBuilder(ConnectionString); return builder.CsvFile; } set { CsvConnectionStringBuilder builder = new CsvConnectionStringBuilder(ConnectionString); builder.CsvFile = value; ConnectionString = builder.ToString(); } } /// /// Gets or sets the codepage of the .csv file. /// [Category("Data")] public int Codepage { get { CsvConnectionStringBuilder builder = new CsvConnectionStringBuilder(ConnectionString); return builder.Codepage; } set { CsvConnectionStringBuilder builder = new CsvConnectionStringBuilder(ConnectionString); builder.Codepage = value; ConnectionString = builder.ToString(); } } /// /// Gets or sets the separator of the .csv file. /// [Category("Data")] public string Separator { get { CsvConnectionStringBuilder builder = new CsvConnectionStringBuilder(ConnectionString); return builder.Separator; } set { CsvConnectionStringBuilder builder = new CsvConnectionStringBuilder(ConnectionString); builder.Separator = value; ConnectionString = builder.ToString(); } } /// /// Gets or sets the value indicating that field names should be loaded from the first string of the file. /// [Category("Data")] public bool FieldNamesInFirstString { get { CsvConnectionStringBuilder builder = new CsvConnectionStringBuilder(ConnectionString); return builder.FieldNamesInFirstString; } set { CsvConnectionStringBuilder builder = new CsvConnectionStringBuilder(ConnectionString); builder.FieldNamesInFirstString = value; ConnectionString = builder.ToString(); } } /// /// Gets or sets the value indicating that quotation marks should be removed. /// [Category("Data")] public bool RemoveQuotationMarks { get { CsvConnectionStringBuilder builder = new CsvConnectionStringBuilder(ConnectionString); return builder.RemoveQuotationMarks; } set { CsvConnectionStringBuilder builder = new CsvConnectionStringBuilder(ConnectionString); builder.RemoveQuotationMarks = value; ConnectionString = builder.ToString(); } } /// /// Gets or sets the value indicating that field types fhould be converted. /// [Category("Data")] public bool ConvertFieldTypes { get { CsvConnectionStringBuilder builder = new CsvConnectionStringBuilder(ConnectionString); return builder.ConvertFieldTypes; } set { CsvConnectionStringBuilder builder = new CsvConnectionStringBuilder(ConnectionString); builder.ConvertFieldTypes = value; ConnectionString = builder.ToString(); } } /// /// Gets or sets locale name used to auto-convert numeric fields, e.g. "en-US". /// [Category("Data")] public string NumberFormat { get { CsvConnectionStringBuilder builder = new CsvConnectionStringBuilder(ConnectionString); return builder.NumberFormat; } set { CsvConnectionStringBuilder builder = new CsvConnectionStringBuilder(ConnectionString); builder.NumberFormat = value; ConnectionString = builder.ToString(); } } /// /// Gets or sets locale name used to auto-convert currency fields, e.g. "en-US". /// [Category("Data")] public string CurrencyFormat { get { CsvConnectionStringBuilder builder = new CsvConnectionStringBuilder(ConnectionString); return builder.CurrencyFormat; } set { CsvConnectionStringBuilder builder = new CsvConnectionStringBuilder(ConnectionString); builder.CurrencyFormat = value; ConnectionString = builder.ToString(); } } /// /// Gets or sets locale name used to auto-convert datetime fields, e.g. "en-US". /// [Category("Data")] public string DateTimeFormat { get { CsvConnectionStringBuilder builder = new CsvConnectionStringBuilder(ConnectionString); return builder.DateTimeFormat; } set { CsvConnectionStringBuilder builder = new CsvConnectionStringBuilder(ConnectionString); builder.DateTimeFormat = value; ConnectionString = builder.ToString(); } } #endregion Properties #region Constructors /// /// Initializes a new instance of the class. /// public CsvDataConnection() { IsSqlBased = false; } #endregion Constructors #region Protected Methods /// protected override DataSet CreateDataSet() { DataSet dataset = base.CreateDataSet(); CsvConnectionStringBuilder builder = new CsvConnectionStringBuilder(ConnectionString); List rawLines = CsvUtils.ReadLines(builder); DataTable table = CsvUtils.CreateDataTable(builder, rawLines); if (table != null) dataset.Tables.Add(table); return dataset; } /// protected override void SetConnectionString(string value) { DisposeDataSet(); base.SetConnectionString(value); } #endregion Protected Methods #region Public Methods /// public override void FillTableSchema(DataTable table, string selectCommand, CommandParameterCollection parameters) { // do nothing } /// public override void FillTableData(DataTable table, string selectCommand, CommandParameterCollection parameters) { // do nothing } /// public override void CreateTable(TableDataSource source) { if (DataSet.Tables.Count == 1) { source.Table = DataSet.Tables[0]; base.CreateTable(source); } else { source.Table = null; } } /// public override void DeleteTable(TableDataSource source) { // do nothing } /// public override string QuoteIdentifier(string value, DbConnection connection) { return value; } /// public override string[] GetTableNames() { string[] result = new string[DataSet.Tables.Count]; for (int i = 0; i < DataSet.Tables.Count; i++) { result[i] = DataSet.Tables[i].TableName; } return result; } #endregion Public Methods } }