Если все, что вы когда-либо собираетесь сделать, это вставки, то самый простой способ - просто пройти по строкам в DataTable
и создать и выполнить DbCommand
для каждой строки. Конкретный синтаксис зависит от типа используемой вами базы данных; для SQL Server это может выглядеть так:
string sql = "INSERT INTO T (A, B, C) VALUES (@A, @B, @C)";
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
foreach (DataRow r in myTable.Rows)
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("@A", r["A"]);
cmd.Parameters.AddWithValue("@B", r["B"]);
cmd.Parameters.AddWithValue("@C", r["C"]);
cmd.ExecuteNonQuery();
}
}
Это скрывает многие возможные осложняющие факторы, например, обработка исключений, фильтрация строк с неправильным DataRowState
, вызов AcceptChanges
для DataRow
, обновление столбцов идентификаторов значением, назначенным базой данных, и так далее. В ADO.NET есть много чего понять, и это есть причина. Но если все, что вы собираетесь сделать, это вставить строки, и объекты DataColumn
в вашем DataTable
будут иметь правильные имена и типы и правильные значения для Size
и AllowDbNull
, и нет никаких отношений внешнего ключа вовлечены, и вы не встретите дубликаты первичных ключей с существующими данными в таблице, приведенное выше должно работать.