我的方案是我有一个Excel电子表格,我想上传到SQL数据库,更新基于主键值(在Excel电子表格中被锁定和隐藏)的信息。我有以下代码可用于在数据库中插入新条目,但我不知道如何使其适应 UPDATE :
string path = string.Concat((Server.MapPath("~/temp/" + FileUpload1.FileName)));
FileUpload1.PostedFile.SaveAs(path);
OleDbConnection OleDbcon =
new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path +
";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";");
OleDbCommand cmd = new OleDbCommand("select * from [Sheet1$]",
OleDbcon);
OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(cmd);
OleDbcon.Open();
DbDataReader dr = cmd.ExecuteReader();
string con_str =
@"Data Source=****************mydatasource""""""""""";
SqlBulkCopy bulkInsert = new SqlBulkCopy(con_str);
bulkInsert.DestinationTableName = "TableName";
bulkInsert.WriteToServer(dr);
OleDbcon.Close();
示例数据:
ID StartDate EndDate OrderNumber
1 01/02/2015 NULL 100
2 02/02/2015 NULL 100
3 03/02/2015 NULL 101
4 04/02/2015 NULL 102
5 05/02/2015 NULL 103
结束数据
ID StartDate EndDate OrderNumber
1 01/02/2015 02/02/2015 100
2 02/02/2015 03/02/2015 100
3 03/02/2015 04/02/2015 101
4 04/02/2015 05/02/2015 102
5 05/02/2015 06/02/2015 103
感谢你能给我的任何帮助
答案 0 :(得分:1)
我相信您需要迭代数据读取器并测试日期值,并在发现时发出单个更新语句,例如:
while (reader.Read())
{
//test if row exists
//then Update
//else Insert
}
答案 1 :(得分:1)
您已经拥有的代码提供了一种将文件加载到SQL Server的有效方法,但并未提供任何灵活性。您可以选择重新编写C#并一次执行一行INSERT / UPDATE,或稍微更改您的方法并将新数据放入工作表中,然后调用存储过程以执行实际的INSERT / UPDATE。工作台到真正的桌子 - 后者将是我的推荐。