Donc, j'ai utilisé cette méthode pour insérer des enregistrements dans ma base de données:
TransactionBlock.Connection.Execute(
"INSERT Table(Item,Id)VALUES(@Item, @Id);
new {Item,Id = id }, TransactionBlock.Transaction);
Je dois maintenant modifier ceci, pour vérifier d'abord si l'élément / l'ID est déjà dans la base de données, en utilisant ce qui suit:
const sql = "IF EXISTS (SELECT * FROM Table, où Item = @ Item ... etc etc
mais je ne suis pas tombé sur des exemples de comment y parvenir. Je peux y parvenir en créant une procédure stockée, mais je voudrais essayer et utiliser cette approche.
En supposant que vous utilisez SQL Server et que vous souhaitez uniquement insérer l’enregistrement s’il n’existe pas déjà, le code SQL que vous recherchez est
IF NOT EXISTS (SELECT * FROM Table WHERE Id = @Id)
INSERT INTO Table(Item, Id) VALUES(@Item, @Id)
INSERT INTO TableName (Item, ID)
SELECT @Item, @Id WHERE NOT EXISTS ( SELECT 1 FROM TableName WHERE Id=@Id )
Cela fonctionnera avec une seule déclaration.
Il convient de noter que selon le SGBD sous-jacent, vous pouvez toujours avoir un conflit - si aucun verrou n'est émis et que de nombreuses insertions se produisent simultanément, vous pouvez vous retrouver dans une condition où l'enregistrement n'existe pas lorsqu'il exécute la sélection. tente l'insertion.
Si vous faites face à une situation où les encarts se produisent rapidement, je vous recommande de vous familiariser avec les éléments suivants:
http://weblogs.sqlteam.com/dang/archive/2009/01/31/UPSERT-Race-Condition-With-MERGE.aspx
Bonne chance!