C# - 从ASP.Net中的文件上载更新SQL表

时间:2015-02-06 10:48:41

标签: c# asp.net sql-server excel

我的方案是我有一个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
  1. 插入数据库中的数据时,EndDate为Null。
  2. 结束日期已添加到Excel工作表中,然后我希望C#ASP.Net应用程序更新此信息并更新SQL表,而不是将其作为新行插入。
  3. 结束数据

    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
    

    感谢你能给我的任何帮助

2 个答案:

答案 0 :(得分:1)

我相信您需要迭代数据读取器并测试日期值,并在发现时发出单个更新语句,例如:

 while (reader.Read())
            {
               //test if row exists
               //then Update
               //else Insert
            }

答案 1 :(得分:1)

您已经拥有的代码提供了一种将文件加载到SQL Server的有效方法,但并未提供任何灵活性。您可以选择重新编写C#并一次执行一行INSERT / UPDATE,或稍微更改您的方法并将新数据放入工作表中,然后调用存储过程以执行实际的INSERT / UPDATE。工作台到真正的桌子 - 后者将是我的推荐。