Я импортирую файл Excel (всего около 1000 записей) в выделенную базу данных SQL Server. Поскольку мне нужно работать с входящими данными из Excel (добавьте GUID для каждой строки, некоторые преобразования данных), я хочу делать это по строкам и не хочу для массового импорта (я ничего не имею против транзакций).Импорт файла Excel в SQL Server по строкам
Я смущен тем, как это сделать правильно. Я могу либо использовать 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();
}
Или я могу использовать "Connected" режим, как так:
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 или для каждой строки (как показано в приведенном выше примере), это волшебным образом создаст транзакцию?- Какой метод использовать? Существует также LINQ to SQL - почему бы не использовать это (возможно, из-за другого уровня производительности)?
- Что происходит с
DataSet
, когда возникает некоторая ошибка при чтении файла Excel - обновление все еще помещено на сервер SQL или все потеряно?
Короче: Я хочу чтобы импортировать Excel файл на сервер SQL строку за строкой в то время внесения изменений на данных, которые должны быть импортированы (и я не хочу использовать пакеты SSIS [ потому что помимо преобразования данных я делаю намного больше с файлом Excel, например, импортируя его в Sharepoint и стреляя из Workflows] или BizTalk)
» » Как это сделать красиво?
В итоге я пошел и купил Aspose Cells. В распоряжении Aspose имеется очень хороший набор инструментов.
Почему вы не хотите использовать SSIS? если инструмент подходит ... –
Поскольку я одновременно импортирую файл Excel в Sharepoint и создаю Infopath Forms and Tasks и снимая Workflows, это не просто импорт. Я также гораздо более счастлив иметь свои руки «на коде», чем использовать какой-то пакет SSIS (которого я еще не создал, кроме базовых примеров). –
Ваш вопрос пренебрегает упоминанием этой новой информации .... Но это почти наверняка возможно в SSIS ... –