【问题标题】:SqlBulkCopy - Add rows along with additional values to databaseSqlBulkCopy - 向数据库添加行和附加值
【发布时间】:2015-11-01 08:12:37
【问题描述】:

我正在尝试使用 SqlBulkCopy 将 excel 数据添加到 sql 数据库中的代码 sn-p。代码sn-p如下

OleDbConnection connection=null;
        string FilePath="";
         try
            {
                if (FileUpload1.HasFile)
                {
                    FileUpload1.SaveAs(Server.MapPath("~/UploadedFolder/"+FileUpload1.FileName));
                    FilePath = Server.MapPath("~/UploadedFolder/"+FileUpload1.FileName);
         
                }

                string path = FilePath;
                // Connection String to Excel Workbook
                string excelConnectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 8.0", path);
                connection = new OleDbConnection();
                connection.ConnectionString = excelConnectionString;
                OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", connection);
                connection.Open();
                // Create DbDataReader to Data Worksheet
                DbDataReader dr = command.ExecuteReader();

                // SQL Server Connection String
                string sqlConnectionString = @"Data Source=sample;Initial Catalog=ExcelImport;User ID=sample;Password=sample";

                // Bulk Copy to SQL Server 
                SqlBulkCopy bulkInsert = new SqlBulkCopy(sqlConnectionString);
                bulkInsert.DestinationTableName = "Customer_Table";
                bulkInsert.WriteToServer(dr);
           
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
            finally
            {
                connection.Close();
                Array.ForEach(Directory.GetFiles(Server.MapPath("~/UploadedFolder/")), File.Delete);
            }

这会将 excel 文件中的数据添加到 sql server 数据库表中。但我的要求是我需要添加excel表的值加上我自己的值说自动生成的studentid。

所以我的问题是我将如何添加新值(比如 studentid、batchcode 等)以及从 excel 读取的值。并将这些值添加到每一行excel数据中。

例子:-

excel 包含以下列

客户 ID、城市、国家、邮政编码

现在我需要通过添加一些新列来向 sql server 添加值

StudentID,CustomerID,BatchCode,City,Country,Email,PostalCode

我该怎么做

请帮忙

【问题讨论】:

  • 附加列的数据来自哪里以及它如何与 Excel 中的数据记录相关/关联?例如,在您的示例中,对于每个 Excel 记录,StudentID、BatchCode、Email 列的值是多少。
  • @IvanStoev 这些值可以来自不同的函数或控件。例如,我有一个方法可以创建自动生成的学生 ID,并且可以从下拉列表中检索批处理代码
  • 下面的答案适合你吗?从技术上讲,它可以工作,但不节省空间。
  • @IvanStoev :代码运行良好。但是有没有其他有效的方法。请建议
  • 空间效率低我的意思是数据表使用内存(实际上整个数据都加载到内存中只是为了发送到数据库进行批量插入)。是的,还有其他方法可以避免这种情况,但更复杂,所以如果内存不是问题(即你的数据不是那么大),那么你最好使用这种方法。

标签: c# asp.net sql-server ado.net sqlbulkcopy


【解决方案1】:

您可以执行以下操作:

  • 将excel数据加载到数据表中,
  • 将剩余的列添加到数据表中,
  • 设置新的列值
  • SqlBulk 将数据表复制到 SQL Server 中。

类似这样的:

DbDataReader dr = command.ExecuteReader();

DataTable table = new DataTable("Customers");
table.Load(dr);
table.Columns.Add("StudentId", typeof(int));
table.Columns.Add("BatchCode", typeof(string));
table.Columns.Add("Email", typeof(string));

foreach (DataRow row in table.Rows)
{
    row["StudentId"] = GetStudentId(row);
    row["BatchCode"] = GetBatchCode(row);
    row["Email"] = GetEmail(row);
}


// SQL Server Connection String
string sqlConnectionString = @"Data Source=sample;Initial Catalog=ExcelImport;User ID=sample;Password=sample";

// Bulk Copy to SQL Server 
SqlBulkCopy bulkInsert = new SqlBulkCopy(sqlConnectionString);
bulkInsert.DestinationTableName = "Customer_Table";
bulkInsert.WriteToServer(table);

【讨论】:

    猜你喜欢
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 2015-07-10
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    相关资源
    最近更新 更多