Sono sicuro che esiste una ragione estremamente semplice per cui questa linea non funziona, ma è stata elusa per la settimana passata, quindi spero che qualcun altro se ne accorga colpa mia.DataAdapter.Update() non aggiorna il database
Ho lavorato a questo progetto per diverse settimane fino a un mese. Ho usato un mix di vecchi DataAdapter, CommandBuiler, ecc. Con alcuni codici da linq a sql su 1 database, con più moduli di domanda di Windows. Questo particolare modulo Modifica o elimina le righe dal database utilizzando un DataAdapter, Dataset e Command Builder. Ha funzionato bene, fino a quando ho acceso i computer. Ora il dataset viene aggiornato, ma il database no.
Ecco il codice completo di questa forma:
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Exit Cook Book?", "Exit?", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
Application.Exit();
}
}
private void goBackToolStripMenuItem_Click(object sender, EventArgs e)
{
AddRecipe goBack = new AddRecipe();
Close();
goBack.Show();
}
private void helpToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show("Scan through the Cook Book to find recipes that you wish to edit or delete.", "Help!");
}
SqlConnection con;
SqlDataAdapter dataAdapt;
DataSet dataRecipe;
SqlCommandBuilder cb;
int MaxRows = 0;
int inc = 0;
private void EditRecipe_Load(object sender, EventArgs e)
{
con = new SqlConnection();
dataRecipe = new DataSet();
con.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Recipes.mdf;Integrated Security=True;User Instance=True";
con.Open();
//MessageBox.Show("Database Open");
string sql = "SELECT* From CookBookRecipes";
dataAdapt = new SqlDataAdapter(sql, con);
dataAdapt.Fill(dataRecipe, "CookBookRecipes");
NavigateRecords();
MaxRows = dataRecipe.Tables["CookBookRecipes"].Rows.Count;
con.Close();
}
private void NavigateRecords()
{
DataRow dRow = dataRecipe.Tables["CookBookRecipes"].Rows[inc];
tbRName.Text = dRow.ItemArray.GetValue(0).ToString();
listBox1.SelectedItem = dRow.ItemArray.GetValue(1).ToString();
tbRCreate.Text = dRow.ItemArray.GetValue(2).ToString();
tbRIngredient.Text = dRow.ItemArray.GetValue(3).ToString();
tbRPrep.Text = dRow.ItemArray.GetValue(4).ToString();
tbRCook.Text = dRow.ItemArray.GetValue(5).ToString();
tbRDirections.Text = dRow.ItemArray.GetValue(6).ToString();
tbRYield.Text = dRow.ItemArray.GetValue(7).ToString();
textBox1.Text = dRow.ItemArray.GetValue(8).ToString();
}
private void btnNext_Click(object sender, EventArgs e)
{
if (inc != MaxRows - 1)
{
inc++;
NavigateRecords();
}
else
{
MessageBox.Show("That's the last recipe of your Cook Book!", "End");
}
}
private void btnBack_Click(object sender, EventArgs e)
{
if (inc > 0)
{
inc--;
NavigateRecords();
}
else
{
MessageBox.Show("This is the first recipe of your Cook Book!", "Start");
}
}
private void btnSave_Click(object sender, EventArgs e)
{
cb = new SqlCommandBuilder(dataAdapt);
DataRow daRow = dataRecipe.Tables["CookBookRecipes"].Rows[inc];
daRow[0] = tbRName.Text;
daRow[1] = listBox1.SelectedItem.ToString();
daRow[2] = tbRCreate.Text;
daRow[3] = tbRIngredient.Text;
daRow[4] = tbRPrep.Text;
daRow[5] = tbRCook.Text;
daRow[6] = tbRDirections.Text;
daRow[7] = tbRYield.Text;
daRow[8] = textBox1.Text;
if (MessageBox.Show("You wish to save your updates?", "Save Updates?", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
dataAdapt.Update(dataRecipe, "CookBookRecipes");
MessageBox.Show("Recipe Updated", "Update");
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
SqlCommandBuilder cb;
cb = new SqlCommandBuilder(dataAdapt);
if (MessageBox.Show("You wish to DELETE this recipe?", "Delete?", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
dataRecipe.Tables["CookBookRecipes"].Rows[inc].Delete();
MaxRows--;
inc = 0;
NavigateRecords();
dataAdapt.Update(dataRecipe, "CookBookRecipes");
MessageBox.Show("Your Recipe has been Deleted", "Delete");
}
}
Questo dovrebbe aggiornare la tabella:
dataAdapt.Update(dataRecipe, "CookBookRecipes");
Non ricevo gli eventuali errori, ma la tabella dei dati appena vinto' t aggiornamento.
Grazie in anticipo per il vostro aiuto, e fammi sapere se avete bisogno di ulteriori informazioni.
Hai mai ricevuto una risposta? Sto avendo lo stesso problema con un progetto che ho creato per gestire i miei aggiornamenti Db. Usandolo da un progetto, fallisce proprio come si nota. Usandolo da un altro, funziona bene. Quindi sono davvero perplesso. Ho persino confrontato SqlAdapter.GetUpdateCommand(). CommandText tra i due e sono esattamente gli stessi degli elementi di dati ItemArray. Tuttavia, non capisco tutti i parametri nel comando INSERT generato automaticamente. I RowState sono uguali. Frustrante. –