【发布时间】: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