0
Я пытаюсь добавить данные в таблицу Access, используя коллекцию DataRows из объекта DataTable, и увидеть в телезрителе хороший набор данных (43), но он заполняет одну и ту же запись 43 раза. Я устанавливаю свои параметры неправильно или что я делаю неправильно?Добавление в таблицу OLE типа из DataTable C#
private void PopulateDB(DataTable dtDB)
{
lblDataStatus.Text = "populating master table...";
this.Refresh();
progressBar1.Visible = true;
progressBar1.Value = 1;
progressBar1.Maximum = dtDB.Rows.Count;
string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\path\fname.accdb";
using (OleDbConnection conn = new OleDbConnection (strConn))
{
using (OleDbCommand cmd = new OleDbCommand())
{
foreach (DataRow dr in dtDB .Rows)
{
progressBar1.PerformStep();
try
{
cmd.CommandText = "INSERT INTO PMADocMaster(PN, PNNewRev, PN8Digit, ECO, Mon, SupNum, URL) VALUES (?,?,?,?,?,?,?)";
cmd.Parameters.Add("@pn", OleDbType.VarChar).Value = dr.Field<string>("PNFullNum");
cmd.Parameters.Add("@rev", OleDbType.VarChar).Value = dr.Field<string>("PNNewRev");
cmd.Parameters.Add("@pn8", OleDbType.VarChar).Value = dr.Field<string>("PN8Dig");
cmd.Parameters.Add("@eco", OleDbType.VarChar).Value = dr.Field<string>("ECO");
cmd.Parameters.Add("@mon", OleDbType.VarChar).Value = dr.Field<string>("Mon");
cmd.Parameters.Add("@supnum", OleDbType.VarChar).Value = dr.Field<string>("SupNum");
cmd.Parameters.Add("@url", OleDbType.VarChar).Value = dr.Field<string>("URL");
cmd.Connection = conn;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
catch (Exception e)
{
MessageBox.Show("Error: " + e.Message);
lblDataStatus.Text = e.Message;
return;
// duplicates are happening, will check veracity of data afterwards
}
}
progressBar1.Visible = false;
}
}
}
Если вы используете DataAdapter он будет делать все обновления для вас. Его довольно странно извлекать данные из DataTable для отправки в БД – Plutonix