【发布时间】:2018-05-30 15:21:01
【问题描述】:
我正在尝试将 CSV 文件数据导入 SQL Server 数据库。我有超过 15000 行,并且它每天都会向 CSV 文件添加新行。我需要的只是将新添加的行插入到已经存在的数据库中。 我现在遇到的问题,如果我导入文件,它会插入所有内容,包括旧的 15000 行。我正在考虑将 csv 数据插入临时表并过滤掉重复的行。但我不知道该怎么做。
private void Save_Import_Data_SQL(DataTable importData)
{
using(SqlConnection conn = new SqlConnection(myconnstring))
{
conn.Open();
foreach(DataRow importRow in importData.Rows)
{
DateTime Start_Date_tt = ConvertStringToDate(importRow["Start date"].ToString());
Decimal Start_Time_tt = ConvertStringToDecimal(importRow["Start time"].ToString());
DateTime Finish_Date_tt = ConvertStringToDate(importRow["Finish date"].ToString());
Decimal Finish_Time_tt = ConvertStringToDecimal(importRow["Finish time"].ToString());
Decimal Pieces_tt = ConvertStringToDecimal(importRow["Pieces"].ToString());
Decimal cycle_tt = ConvertStringToDecimal(importRow["Average part cycle time"].ToString());
Decimal length_tt = ConvertStringToDecimal(importRow["Length_pa"].ToString());
SqlCommand cmd = new SqlCommand("INSERT INTO Silver_Robot(Program_S,Grpup_S,Start_Date_S,Start_Time_S,Pieces_S,Finish_Date_S,Finish_Time_S,Average_Part_Cycle_Time_S,Mode_S,Length_S) VALUES(@program,@group,@start_Date,@start_time,@pieces,@finish_date,@finish_time,@avarage_part,@mode_p,@length_p)", conn);
cmd.Parameters.AddWithValue("@program", importRow["Program"]);
cmd.Parameters.AddWithValue("@group", importRow["Group"]);
cmd.Parameters.AddWithValue("@start_Date", Start_Date_tt);
cmd.Parameters.AddWithValue("@start_time", Start_Time_tt);
cmd.Parameters.AddWithValue("@pieces", Pieces_tt);
cmd.Parameters.AddWithValue("@finish_date", Finish_Date_tt);
cmd.Parameters.AddWithValue("@finish_time", Finish_Time_tt);
cmd.Parameters.AddWithValue("@avarage_part", cycle_tt);
cmd.Parameters.AddWithValue("@mode_p", importRow["Mode"]);
cmd.Parameters.AddWithValue("@length_p", length_tt );
cmd.ExecuteNonQuery();
}
}
}
任何帮助将不胜感激
【问题讨论】:
-
临时表不知道怎么办?如何创建表,如何向表中插入记录(顺便说一句,
SqlBulkCopy可能比SqlCommend更快地上传数据)或如何将新记录从临时表复制到实时表? -
我可以将数据插入临时表,但我不知道如何比较它并将其移动到新表。我也尝试进行批量插入,但它对我不起作用,我猜这是服务器的一些权限问题,因为我使用的是我的合作服务器,我无法完全访问所有内容。我是一名电工,对服务器没有太多经验。
-
不要创建一个新的真实表,当你声明你的临时表在它的名字前面使用一个#(
CREATE Table #myTempTable (Foo int, Bar nvarchar(100))),这是一个只存在于生命周期的临时表你的连接。您应该能够批量插入该临时表。至于如何比较,哪些信息需要相同才能被认为是“重复”,我们需要知道这一点才能知道如何过滤掉重复。这是我执行此确切过程的答案stackoverflow.com/questions/31058886/… -
非常感谢。我想我现在知道如何做到这一点了。
-
如果您解决了自己的问题,请随时发布答案并将其标记为已接受。