J'ai quelques données qui devraient être insérées dans 4 tables une de ces données est stockée dans les lignes sélectionnées de la grille de données, donc je passerais en revue la grille les insérer dans la base de données J'ai aussi utilisé une méthode qui fait la transaction et prend les SqlCommands comme matrice et les passe ensuite une par une, mais quand j'essaie d'insérer des données, elle me donne l'exception "L'index était hors de portée. et moins que la taille de la collection. " dans cette ligneInsérer la grille de données afficher les lignes sélectionnées dans la base de données en utilisant la boucle
cm[i].Parameters.Add("@car", Convert.ToInt32(newCarAdCarDgv.Rows[i].Cells[0].Value.ToString()));
Ceci est la méthode de transaction:
public void ExTr(SqlCommand[] cm)
{
if (cn.State == ConnectionState.Closed)
{
cn.Open();
}
SqlTransaction tr = cn.BeginTransaction();
for (int x = 0; x < cm.Length; x++)
{
cm[x].Connection = cn;
cm[x].Transaction = tr;
}
try
{
for (int x = 0; x < cm.Length; x++)
{
cm[x].ExecuteNonQuery();
}
tr.Commit();
MessageBox.Show("تمت عملية إضافة البيانات بنجاح");
}
catch (SqlException ex)
{
tr.Rollback();
MessageBox.Show(ex.Message);
}
finally
{
if (cn.State == ConnectionState.Open)
{
cn.Close();
}
}
}
Et voici le code pour l'insertion:
private void newAdSaveBtn_Click(object sender, EventArgs e)
{
try
{
count = newCarAdCarDgv.SelectedRows.Count + 3;
if (cn.State == ConnectionState.Closed)
{
cn.Open();
}
newCarAdClientPhoneTxt_Leave(sender, e);
newCarAdClientEmailTxt_Leave(sender, e);
newCarAdNotesTxt_Leave(sender, e);
SqlCommand[] cm = new SqlCommand[count];
cm[0] = new SqlCommand("insert into clientData (Id,clientName,clientWork,clientPhone,clientMobile,clientEmail) values (@id,@name,@work,@phone,@mobile,@email)", cn);
cm[0].Parameters.AddWithValue("@id", id);
cm[0].Parameters.AddWithValue("@name", newCarAdClientNameTxt.Text.Trim());
cm[0].Parameters.AddWithValue("@work", newCarAdClientWorkTxt.Text.Trim());
cm[0].Parameters.AddWithValue("@phone", newCarAdClientPhoneTxt.Text.Trim());
cm[0].Parameters.AddWithValue("@mobile", newCarAdClientMobileTxt.Text.Trim());
cm[0].Parameters.AddWithValue("@email", newCarAdClientEmailTxt.Text.Trim());
cm[1] = new SqlCommand("insert into marketingData (m_Id,marketingDurations,marketingStartsFrom,marketingEndsIn,notes,adDate) values (@id,@durations,@start,@end,@notes,@date)", cn);
cm[1].Parameters.AddWithValue("@id", id);
cm[1].Parameters.AddWithValue("@durations", newCarAdAdDurationTxt.Text.Trim());
cm[1].Parameters.AddWithValue("@start", newCarAdStartDayDtp.Value);
cm[1].Parameters.AddWithValue("@end", newCarAdEndDayDtp.Value);
cm[1].Parameters.AddWithValue("@notes", newCarAdNotesTxt.Text.Trim());
cm[1].Parameters.AddWithValue("@date", newCarAdDateDtp.Value);
cm[2] = new SqlCommand("insert into priceAndProfits (p_Id,marketingCost,marketingPrice,marketingProfit,dollarPrice) values (@id,@cost,@price,@profit,@dollar)", cn);
cm[2].Parameters.AddWithValue("@id", id);
cm[2].Parameters.AddWithValue("@cost", newCarAdCostTxt.Text.Trim());
cm[2].Parameters.AddWithValue("@price", newCarAdPriceTxt.Text.Trim());
cm[2].Parameters.AddWithValue("@profit", newCarAdProfitTxt.Text.Trim());
cm[2].Parameters.AddWithValue("@dollar", newCarAdDollarPriceTxt.Text.Trim());
for (int i = 3; i <= newCarAdCarDgv.SelectedRows.Count + 3; i++)
{
cm[i] = new SqlCommand("insert into carWorkCount (c_Id,carId) value (@id,@car)", cn);
cm[i].Parameters.Add("@id", id);
cm[i].Parameters.Add("@car", Convert.ToInt32(newCarAdCarDgv.Rows[i].Cells[0].Value.ToString()));
}
ExTr(cm);
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
}
il me donne "index était hors des limites du tableau" – Huda
Sur quelle ligne avez-vous reçu l'exception? – Steve