Я импортирую файл Excel (только около 1000 записей) в выделенную базу данных SQL Server.Поскольку мне нужно работать с входящими данными из Excel (добавить GUID для каждой строки, некоторые преобразования данных), я хочу делать это построчно и не хочу массового импорта (хотя я ничего не имею против транзакций).
Я не понимаю, как это сделать правильно.Я могу использовать SQLCommand
с такими параметрами:
SqlCommand sqlCommand = new SqlCommand("insert into TestTable(GUID,Name,Pricing) values(@GUID,@Name,@Pricing)", sqlConn);
foreach (DataRow dr in ds.Tables[0].Rows) //<-- this is my Excel file to iterate through
{
sqlCommander.Parameters.Clear();
String refGUID = Guid.NewGuid().ToString();
sqlCommander.Parameters.AddWithValue("GUID", refGUID);
sqlCommander.Parameters.AddWithValue("Name", dr.ItemArray[0]);
sqlCommander.Parameters.AddWithValue("Pricing", dr.ItemArray[1]);
sqlCommander.ExecuteNonQuery();
}
Или я могу использовать режим «подключен» следующим образом:
SqlDataAdapter dataAdapter = new SqlDataAdapter("SELECT GUID, Name, Pricing FROM TestTable", sqlConn);
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
DataSet myDataSet = new DataSet();
dataAdapter.Fill(myDataSet, "TestTable");
foreach (DataRow dr in ds.Tables[0].Rows) //<-- this is my Excel file to iterate through
{
DataRow row = myDataSet.Tables[0].NewRow();
row["GUID"] = refGUID;
row["Name"] = dr.ItemArray[0];
row["Pricing"] = dr.ItemArray[1];
myDataSet.Tables[0].Rows.Add(row);
dataAdapter.Update(myDataSet);
}
Теперь мои вопросыследующее:
- Лучше ли отправлять команду
INSERT
для каждой строки (это будет метод SqlCommand
), либо лучше заполнить специальный DataSet
(2-й метод)Я предполагаю, что это довольно "глупо" иметь 1000 вставок на сервер SQL? dataAdapter.Update(myDataSet)
<- я должен сделать это ПОСЛЕ итерации по всем строкам Excel или для каждой строки (как показано в примереприведенный выше код), будет ли это волшебным образом создавать транзакцию? </li> - Какой метод мне следует использовать? Существует также LINQ to SQL - почему бы не использовать это (производительность может быть из-за другого уровня)?
- Что происходит с
DataSet
, когда возникает ошибка при считывании файла Excel - обновление все еще передается на сервер SQL или все потеряно?
Вкратце: Я хочу импортировать файл Excel на SQL-сервер построчно при внесении изменений в импортируемые данные (и я не хочу использовать пакеты служб SSIS [потому что помимо преобразования данных)Я делаю гораздо больше с файлом Excel, например импортирую его в Sharepoint и запускаю Workflows] или BizTalk)
"" Как это сделать красиво?В итоге я пошел дальше и купил Aspose Cells .У Aspose есть очень хороший набор инструментов.