Я читаю на SQLBulkCopy
и хотел бы использовать его для импорта тысяч строк из документа Excel в SQL Server. Я продолжаю читать статьи, которые делают это напрямую, без изменения данных. Перед выполнением SQLBulkCopy
мне нужно сделать некоторые изменения и проверки данных в документе Excel. Можно ли сделать это? Я бы предположил, что из перегрузок я могу изменить данные и создать большой DataTable
, и импортировать это DataTable
с WriteToServer
.SQL Bulk Copy с Excel на SQL Server, но с изменениями данных
0
A
ответ
1
Возможно, вам понадобится DataReader или DataSet, которые вы можете выполнить для проверки/модификации перед импортом.
Эта утилита может помочь вам - http://exceldatareader.codeplex.com/
0
Это прекрасно работает для меня:
public ActionResult Create(HttpPostedFileBase file)
{
string strConnection = ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString;
//file upload path
var fileName = Path.GetFileName(file.FileName);
// store the file inside ~/App_Data/uploads folder
var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
file.SaveAs(path);
//Create connection string to Excel work book
string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;Persist Security Info=False";
//Create Connection to Excel work book
OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
//Create OleDbCommand to fetch data from Excel
excelConnection.Open();
DataTable dt = new DataTable();
dt = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if (dt == null)
{
return null;
}
String[] excelSheets = new String[dt.Rows.Count];
int t = 0;
//excel data saves in temp file here.
foreach (DataRow row in dt.Rows)
{
excelSheets[t] = row["TABLE_NAME"].ToString();
t++;
}
OleDbConnection excelConnection1 = new OleDbConnection(excelConnectionString);
string query = string.Format("SELECT * FROM [{0}]", excelSheets[0]);
OleDbCommand cmd = new OleDbCommand(query, excelConnection);
//excelConnection.Open();
OleDbDataReader dReader;
dReader = cmd.ExecuteReader();
SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection);
//Give your Destination table name
sqlBulk.DestinationTableName = "[FSM].[DFS_Akustik]";
sqlBulk.WriteToServer(dReader);
excelConnection.Close();
ViewBag.view_dfs_akustik = dbman.View_DFS_Akustik.ToList();
return View();
}
Смежные вопросы
- 1. SQL Bulk copy (unicode)
- 2. sql server bulk copy out/postgres copy from infile
- 3. SQL bulk copy с сопоставленными столбцами
- 4. Использование SQL Bulk Copy для заполнения таблицы базы данных
- 5. bulk insert sql server
- 6. SQL Server Bulk Insert
- 7. Соединения данных Excel SQL Server
- 8. Асинхронный SQL Bulk Copy и пакетная Выбор
- 9. SQL Bulk copy to Structured Table Insert
- 10. SQL Server BULK INSERT с предложением OUTPUT
- 11. C# SQL Bulk Copy: Column возвращение «нуль» на полпути
- 12. Обновление Bulk Data SQL server
- 13. SQL Bulk Copy не работает с разреженной колонкой
- 14. Sql Bulk Copy/Insert in C#
- 15. BULK INSERT в SQL Server
- 16. BULK генерировать данные SQL Server
- 17. Bulk Upsert SQL Server 2005
- 18. Интеграция Excel с SQL Server
- 19. Как сделать проверку в sql bulk copy upload
- 20. Как использовать SQL Bulk Copy с Dapper .Net?
- 21. Sql Server 2005 Bulk XML Удалить?
- 22. Вставить пустую строку на SQL Server с BULK INSERT
- 23. Oracle bulk copy импорт неправильных данных
- 24. Импорт данных из листа Excel в базу данных SQL Server
- 25. SQL BULK INSERT с созданием таблицы на лету
- 26. SQL BULK INSERT ошибок
- 27. SQL bulk copy для собственных клиентов вызывает нарушение прав доступа
- 28. SQL Server: BULK INSERT не работает
- 29. SQL Server bulk insert identity column
- 30. SQL Server bulk insert int в bigint
Так это выглядит, как можно сделать проверку на файл перед импортом. –
Да, я сделал это сам, используя собственный поставщик DataSet, хотя этот инструмент должен помочь сделать его проще. После проверки вы можете использовать одни и те же таблицы DataSet для импорта, или вы можете использовать отдельный SqlBulkCopy для работы с файлом напрямую. – PinnyM
Спасибо. Не существует способа узнать, какая строка была ошибочной, если сбои ввальной вставки отсутствуют? –