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
}
}