我接管了另一个开发人员编写的应用程序,该应用程序从数据库中读取数据并将其导出。
开发人员使用了DataTables和DataAdaptors。
所以,
_dataAdapter = new SqlDataAdapter("Select * From C....", myConnection);
然后
ExtractedData = new DataTable("CreditCards");
_dataAdapter.Fill(ExtractedData);
然后传递ExtractedData来执行不同的功能。
我现在被告知,除此之外,我需要从一些逗号分隔的文本文件中获取相同格式的数据。该应用程序执行相同的处理 - 它只是从两个来源获取数据。
所以,我想知道我是否可以将数据读入DataTable,如上所述,然后从CSV文件中添加更多记录。
这可能吗?
答案 0 :(得分:8)
您可能需要使用此功能从文件中将数据读入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;
}
答案 1 :(得分:0)
绝对有可能。
DataTable有一个NewRow方法,所以我能看到的最简单,强力的方法是一次读取一行文本文件,解析字符串(split(“,”)然后填充行的字段。然后你需要将新行添加到DataTable的Rows集合中
可能有更聪明的方法来实现这一点,但实现起来似乎相当简单(不了解您的架构)。
答案 2 :(得分:0)
好的,试试这个:
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;
}