我编写了一个代码,该代码将读取CSV文件并解析数据,然后将数据添加到Microsoft SQL服务器中。我遇到的问题是在正确的列中添加正确的数字。以下是我的示例数据:(是的,我知道这不是CSV,我把它放到Excel中并复制粘贴以便于阅读)
department emplnum lastname firstname sum_reg sum_ot procdate
114 1 a a 25320 0 3674419200
114 1 a a 0 0 3674505600
114 2 b b 9960 0 3673900800
114 2 b b 10440 0 3674160000
114 2 b b 14760 0 3674246400
114 2 b b 0 0 3674505600
这只是一个示例,还有很多值。如您所见,同一员工有多行。我希望我的SQl表具有列部门,emplnum,lastname,firstname,然后是sum_reg,sum_ot和sum_procdate的7个不同的列(即sum_reg1,sum_reg2,sum_reg3 ....以及其他两列的相同格式)。如果您在我发布的表格中注意到,则一个人有多个sum_reg,sum_ot和procdate值。我想要的是将这三列的第一个值放在sum_reg1,sum_ot1和procdate1中然后是下一行是同一个人,但是一个不同的procdate,它会将下一行数据放入sum_reg2,sum_ot2和procdate2。然后,当它到达一个新人时,它也将为他们做到这一点。
这是我到目前为止编写的代码(它不是完整的代码,只是与我想要完成的代码相关的代码):
SqlCommand cmd;
SqlConnection conn;
conn = new SqlConnection("Data Source=hureports01;Initial Catalog=hureports;Integrated Security=True");
conn.Open();
var sqlCommand = string.Format(@"MERGE [TABLE] AS target USING (select @department as department, @employee_ID as employee_ID, @last_name as last_name, @first_name as first_name, @Day as {0}, @regular_hours as {0}, @ot1_hours as {0})
AS source ON (target.employee_ID = source.employee_ID) WHEN MATCHED THEN UPDATE SET {0}= source.{0} WHEN NOT MATCHED THEN INSERT (department, employee_ID, last_name, first_name, {0}) VALUES (source.department, source.employee_ID, source.last_name, source.first_name, source.{0});");
cmd = new SqlCommand(sqlCommand, conn);
cmd.Parameters.AddWithValue("@department", record.department);
cmd.Parameters.AddWithValue("@employee_ID", record.emplnum);
cmd.Parameters.AddWithValue("@last_name", record.lastname);
cmd.Parameters.AddWithValue("@first_name", record.firstname);
cmd.Parameters.AddWithValue("@Day", record.procdate);
cmd.Parameters.AddWithValue("@regular_hours", record.sum_reg_a);
cmd.Parameters.AddWithValue("@ot1_hours", record.sum_ot1_a);
cmd.ExecuteNonQuery();
conn.Close();
我是一个非常懂的编码员,这是我第一次使用c#和Microsoft SQL服务器。我到目前为止所有的东西都上网了。我的Merge语句有问题,尤其是当它不匹配时结束。我也在努力研究如何保持相同的行,但每个不同的sum_reg,sum_ot和procdate都有不同的列。