La simultanéité de la violation: le DeleteCommand touchées 0 de l'1 records
Je suis en train de supprimer un enregistrement à partir d'un datagridview, puis de le mettre à jour à un serveur mysql, cependant je reçois "la Simultanéité de la violation: le DeleteCommand touchées 0 de l'1 records.". J'ai googlé et foiré autour avec elle un peu, et ne peut pas trouver un correctif pour l'amour ni l'argent. Où vais-je tort?
private void Form1_Load(object sender, EventArgs e)
{
try
{
//create a connection to the server
connection = new MySqlConnection("SERVER=" + Constants.SERVER + ";" + "DATABASE=" + Constants.DATABASE + ";UID=" + Constants.USERNAME + ";" + "PASSWORD=" + Constants.PASSWORD + ";");
connection.Open();
//create our default handler
adapter = new MySqlDataAdapter();
//set the default commands to do
adapter.SelectCommand = new MySqlCommand("SELECT * FROM npc_drops", connection);
MySqlCommand query = new MySqlCommand("DELETE FROM npc_drops WHERE id = @id", connection);
query.Parameters.Add("@id", MySqlDbType.Int32, 10, "id");
adapter.DeleteCommand = query;
//create a table to put our data in and fill it with the results
table = new DataTable();
adapter.Fill(table);
//bind both the data table and the datagridview togeather
BindingSource source = new BindingSource();
source.DataSource = table;
dataGridView1.DataSource = source;
dataGridView1.Columns["id"].Visible = false;
}
catch (MySqlException ex)
{
MessageBox.Show(ex.Message);
}
}
private void button1_Click(object sender, EventArgs e)
{
try
{
table = table.GetChanges();
adapter.Update(table);
}
catch (MySqlException ex)
{
MessageBox.Show(ex.Message);
}
}
Table:
CREATE TABLE `npc_drops` (
`id` INT(10) NULL AUTO_INCREMENT,
`npcs` VARCHAR(250) NULL DEFAULT NULL,
`rate` INT(3) NULL DEFAULT NULL,
`item` INT(5) NULL DEFAULT NULL,
`amount` INT(10) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
stackoverflow.com/questions/6111961/... cochez cette
merci j'ai mis à jour cette ligne, mais de recevoir toujours la même redoutable erreur!
- est-ce votre table à l'aide de INNODB ou MYISAM? - êtes-vous à l'aide de autocommits?
Ne pas MySQL nécessitent des paramètres de préfixe : c'est à dire :id ?
merci j'ai mis à jour cette ligne, mais de recevoir toujours la même redoutable erreur!
- est-ce votre table à l'aide de INNODB ou MYISAM? - êtes-vous à l'aide de autocommits?
Ne pas MySQL nécessitent des paramètres de préfixe : c'est à dire :id ?
OriginalL'auteur Stuart James | 2012-05-22
Vous devez vous connecter pour publier un commentaire.
Je sais que c'est un vieux thread, mais j'ai eu le même problème et trouvé la solution. Peut-être que quelqu'un d'autre va le voir ici.
À l'aide de Visual Studio, dans le .fichier xsd, il y a une commande de SUPPRESSION de la carte de données. Qui commande dans le formulaire de SQL "DELETE from table where colonne1 = @Original_column1 ET colonne2 = @Original_column2 ET..." par défaut, il compare toutes les colonnes, les valeurs qu'ils avaient quand vous lisez la bd, et de ne pas supprimer l'enregistrement, à moins qu'ils correspondent à tous. C'est pour éviter d'écraser les modifications faites par d'autres, entre le moment où vous lisez l'enregistrement et quand vous essayez de la modifier.
Voici la question. Si l'une de ces colonnes est NULL dans la base de données, qu'il ne correspond pas et les erreurs que vous décrivez.
PS: j'ai rien eu, mais difficultés à autoriser les valeurs Null dans la base de données lors de l'utilisation de la VS db bibliothèques. LINQ2SQL ou quelque soit le nom de...
OriginalL'auteur John Marion
Une simultanéité Exception se produit lorsque vous essayez de supprimer un enregistrement avec pas de correspondance dans la base de données réelle , ce qui se passe avec les nouveaux enregistrements qui ont une colonne d'identité que l'ensemble de données ne va pas récupérer la valeur de la colonne identité immédiatement après l'ajout.
pour corriger cela, vous devez
1-pour récupérer la valeur de la colonne identité à partir de la base de données par l'exécution d'une commande SQL, puis mettre à jour l'enregistrement dans le jeu de données avec cette valeur.
ou
2 - vous pouvez accepter les modifications sur les données de la base de la table en appelant le :
puis à droite après la recharge vous tableau de données en appelant
OriginalL'auteur newComer
Une simultanéité des exceptions signifie que moins de lignes ont été modifiées que prévu, cela se produit généralement lorsque vous avez une clause where sur une mise à jour/suppression qui empêche l'action de l'exécution. (c'est généralement de la façon dont la simultanéité des œuvres - vous de vérifier la LastUpdateDate n'a pas changé à l'aide d'un cas où, pour vérifier la personne ne s'est entre vos opérations de lecture et écriture)
le seul endroit où vous avez sur la suppression est "id = @id", de sorte que le problème doit être que l'id n'existe pas dans la base de données lorsque le DeleteCommand est exécutée.
je vois deux problèmes avec votre code:
le problème peut être dû à la ligne supprimée beeng gardé et supprimés une fois de plus, ou d'une autre opération de suppression de l'entrée avant de le supprimer (dans ce dernier cas, vous devez gérer la simultanéité exception)
OriginalL'auteur Amitbe
À cause du problème de NULL mentionné ci-dessus, vous pouvez essayer de DÉSACTIVER 'accès concurrentiel optimiste" sur l'ensemble de données de générer des méthodes.
OriginalL'auteur user9576976