DataAdapter.Update () ne met pas à jour la base de données
Je suis sûr qu'il est extrêmement simple raison que cette ligne ne fonctionne pas, mais il a éludé la semaine dernière, donc je suis en espérant que quelqu'un d'autre le fera remarquer ma faute.
Je travaille sur ce projet depuis plusieurs semaines à un mois. J'ai été en utilisant un mélange de vieux DataAdapter, CommandBuiler, etc. avec quelques linq to sql codage sur 1 base de données, avec de multiples fenêtres formulaires de demande. Cette forme particulière Modifie ou Supprime les lignes de la Base de données à l'aide d'un DataAdapter, tout ensemble de données et de Commande du Générateur. Il a été fonctionne bien, jusqu'à ce que j'ai changé d'ordinateurs. Maintenant le jeu de données est en cours de mise à jour, mais la Base de données n'est pas.
Voici le code complet de cette forme:
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");
}
}
Ce qui est censé mettre à jour la table:
dataAdapt.Update(dataRecipe, "CookBookRecipes");
Je ne reçois pas toutes les erreurs, mais le tableau de données ne sera pas mise à jour.
Merci d'avance pour votre aide, et laissez-moi savoir si vous avez besoin de plus d'informations.
source d'informationauteur Miffed
Vous devez vous connecter pour publier un commentaire.
Afin de mettre à jour les données dans la base de données de votre SqlDataAdapter besoin d'avoir son InsertCommand, UpdateCommand DeleteCommand ensemble. Le SqlCommandBuilder exemple que vous avez créé a ces commandes, mais vous avez besoin de les régler à votre SqlDataAdapter.
Dans d'autres univers: quelque part entre
et
vous devez
Ce qui ne l'
SqlCommand
pour la mise à Jour? Je vois la commande, mais je ne vois pas de Textesql, c'est ce que vous êtes absent.Vous devez définir ce que
.Update
n'par la mise en.UpdateCommand
bien sur laSqlDataAdapter
Ce lien donne une assez bonne répartition sur la façon d'aller à ce sujet:
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.updatecommand.aspx
Vous pourriez avoir besoin
J'ai eu le même problème: le remplissage est un nouveau jeu de données avec de nouvelles lignes, mais rien ne s'est passé sur la mise à jour. J'ai utilisé le MySqlDataAdapter qui fonctionne de la même.
Il s'avère que lorsque vous avez besoin de la InsertCommand de la MySqlCommandBuilder vous devez spécifier le rowstate comme ajouté. Voir aussi: MSDN
}
Essayer la source ci-dessous.
Ajoutant AcceptChangesDuringUpdate avant la mise à Jour fonctionne pour moi, exemple :
J'ai rencontré le même problème. Mon dataadapter.des travaux de remblai, mais dataadapter.la mise à jour ne fonctionne pas. J'ai réalisé que le problème était que ma table de base de données ne contient pas de clé primaire. Après j'ai modifié mon tableau pour inclure une colonne de clé primaire, dataadapter.des travaux de remblai.
Espérons que cela aide quelqu'un.