繁体   English   中英

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

[英]C# - Updating an SQL Table from a file upload in ASP.Net

我的情况是,我有我要上传到SQL数据库和更新基于主键值(其被锁定和隐藏Excel电子表格中)的信息的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表,而不是将其插入为新行。

最终数据

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

感谢你给与我的帮助

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM