Ниже приведена часть шаблона с половинной псевдокодом, начиная с:
var datatable = dataset.Tables[0];
using(var proc = connection.CreateCommand(...))
{
proc.Parameters.Add("@firstcolumnname", SqlDbType.Int);
foreach(DataRow dr in datatable.Rows)
{
/* check for DbNull.Value if source column is nullable! */
proc.Parameters["@firstcolumnname"].Value = dr["FirstColumnName"];
proc.ExecuteNonQuery();
}
}
Но это имеет смысл только в том случае, если вы выполняете обработку данных внутри хранимой процедуры. В противном случае это требует массовой вставки, особенно если у вас есть много (тысяч) строк в листах excel.
Отношение «один ко многим» (внешний ключ) может быть сложным, если вы можете управлять порядком вставок, а затем просто начинать с «одной» таблицы, а затем загружать «многие» таблицы. Пусть хранимая процедура соответствует значениям ключа, если они не являются частью исходных данных Excel.
Вся история, если вы находитесь в параллельной многопользовательской среде, и к таблицам обращаются и записываются, пока вы загружаете. Затем вам нужно будет добавить транзакции, чтобы сохранить ссылочную целостность во всем процессе.