DataTable из TextFile?
Я принял приложение, написанное другим разработчиком, которое считывает данные из базы данных и экспортирует их.
Разработчик использовал DataTables и DataAdaptors.
Так,
_dataAdapter = new SqlDataAdapter("Select * From C....", myConnection);
а потом
ExtractedData = new DataTable("CreditCards");
_dataAdapter.Fill(ExtractedData);
Затем ExtractedData передается для выполнения различных функций.
Теперь мне сказали, что мне нужно, в дополнение к этому, получить тот же формат данных из некоторых текстовых файлов, разделенных запятыми. Приложение выполняет ту же обработку - оно просто получает данные из двух источников.
Итак, мне интересно, смогу ли я получить данные, считанные в DataTable, как указано выше, а затем ДОБАВИТЬ больше записей из файла CSV.
Это возможно?
3 ответа
Возможно, вам придется использовать эту функцию для чтения данных в DataTable
из файла.
public DataTable GetDataSourceFromFile(string fileName)
{
DataTable dt = new DataTable("CreditCards");
string[] columns = null;
var lines = File.ReadAllLines(fileName);
// assuming the first row contains the columns information
if (lines.Count() > 0)
{
columns = lines[0].Split(new char[] { ',' });
foreach (var column in columns)
dt.Columns.Add(column);
}
// reading rest of the data
for (int i = 1; i < lines.Count(); i++)
{
DataRow dr = dt.NewRow();
string[] values = lines[i].Split(new char[] { ',' });
for (int j = 0; j < values.Count() && j < columns.Count(); j++)
dr[j] = values[j];
dt.Rows.Add(dr);
}
return dt;
}
Это определенно возможно.
В DataTable есть метод NewRow, поэтому самый простой метод грубой силы, который я вижу, - это читать текстовый файл по одной строке за раз, анализировать строку (split(",") и затем заполнять поля строки. Затем вам нужно добавьте новую строку в коллекцию Rows объекта DataTable.
Могут быть более разумные способы сделать это, но это кажется достаточно простым для реализации (без знания вашей схемы).
Хорошо, попробуйте это:
public string[] getColumns(bool ColumnNames)
{
try {
StreamReader fileReader = new StreamReader(FileName);
string line = fileReader.ReadLine;
fileReader.Close();
string[] Columns = line.Split(",");
if (ColumnNames) {
return Columns;
}
int i = 1;
int c = 0;
string[] columnsNames = new string[Columns.Count];
foreach (string column in Columns) {
columnsNames(c) = "column" + i;
i += 1;
c += 1;
}
return columnsNames;
} catch (Exception ex) {
//log to file
}
return null;
}
А ТАКЖЕ
public DataTable ReturnData(bool ColumnNames)
{
try {
DataTable dt = new DataTable();
foreach ( columnName in getColumns(ColumnNames)) {
dt.Columns.Add(columnName);
}
StreamReader fileReader = new StreamReader(FileName);
if (ColumnNames) {
fileReader.ReadLine();
}
string line = fileReader.ReadLine;
while ((line != null)) {
line = line.Replace(Strings.Chr(34), "");
dt.Rows.Add(line.Split(","));
line = fileReader.ReadLine;
}
fileReader.Close();
return dt;
} catch (Exception ex) {
//log to file
}
return null;
}