我使用c#来解析目录中的所有.csv文件,并将每个文件插入到单独的MYSQL表中。解析每个文件名都有效,但我在插入时遇到问题。
所有csv文件都具有相同的格式:
Name,Mike,John,Parker,Joanne,Claire
4/26/2012 12:20,88.1,98.2,87.4,92.5,78.2
5/16/2012 11:20,78.1,78.2,76.4,86.5,97.2
....
....
Grade12表:
Id StudentName Score DateTimeId
日期时间表:
Id DateTime
当我导入csv文件并插入到grade12表中时,我希望结果如下:
Id StudentName Score DateTimeId
1 Mike 88.1 1
2 John 98.2 1
3 Parker 87.4 1
4 Joanne 92.5 1
5 Claire 78.2 1
6 Mike 78.1 2
7 John 78.2 2
8 Parker 76.4 2
9 Joanne 86.5 2
10 Claire 97.2 2
....
....
和日期时间表:
Id DateTime
1 2012-04-26 12:20:00
2 2012-05-16 11:20:00
....
....
到目前为止,我已经尝试了
我的c#代码:
public void process(string csvFile, string grade)
{
using (MySqlCommand insertCommand = connection.CreateCommand())
{
insertCommand.CommandText =
@"INSERT INTO " + grade + "(StudentName, Score, DateTimeId) VALUES (@StudentName, @Score, @DateTimeId)";
insertCommand.Parameters.Add(new MySqlParameter("@StudentName", "STRING"));
insertCommand.Parameters.Add(new MySqlParameter("@Score", "DECIMAL"));
insertCommand.Parameters.Add(new MySqlParameter("@DateTimeId", "INT32"));
string[] lines = System.IO.File.ReadAllLines(csvFile);
foreach (string line in lines)
{
string trimedLine = line.Trim();
if (line.StartsWith("Name"))
{
studentNames = trimedLine.Split(new[] { ',' }).Skip(1).ToArray();
continue;
}
eachRow = trimedLine.Split(new[] { ',' }).Skip(1).ToArray();
for (int i = 0; i < studentNames.Length; i++)
{
MySqlParameter param = insertCommand.Parameters[0];
param.Value = studentNames[i];
}
for (int i = 0; i < eachRow.Length; i++)
{
MySqlParameter param = insertCommand.Parameters[1];
param.Value = eachRow[i];
}
//I am not sure about this part. This is random data for testing purpose.
int[] datetime = { 1, 2, 3, 4, 5, 6, 7, 8 };
for (int i = 0; i < datetime.Length; i++)
{
MySqlParameter param = insertCommand.Parameters[2];
param.Value = datetime[i];
}
insertCommand.ExecuteNonQuery();
}
}
花了很多次,但还是四处闲逛。数据进入了表格,但它们并不好看。任何帮助表示赞赏。
答案 0 :(得分:1)
我担心我没有时间写出任何具体的代码示例,但我个人的做法是将程序分为两部分。
第一部分将解析CSV文件并将其内容放入类和这些类的列表中,以便以可迭代的格式获取数据。这允许您在后续步骤中使用可靠的数据模型,而不必在分析数据时实时构建SQL查询。这也有助于确保CSV格式正确。
第二部分在此之后运行,并使用之前创建的对象来创建和执行SQL查询。由于您已经以更灵活的格式解析了CSV中的数据,因此这应该更加简单。