2016-02-11 2 views
0
string searched = TextBox1.Text; // for example, text is 4477 

... 

sorgu.CommandText = "IF EXISTS(SELECT * FROM [Pins] WHERE Pin =' " + searched.ToString() + " ') BEGIN UPDATE [Pins] SET SAY= SAY+1, Pin = ' " + searched.ToString() + " ' END ELSE BEGIN INSERT INTO Pins(SAY,Pin) VALUES (+1,' " + searched.ToString() + " ') END"; 

... 

J'utilise SAY pour compter le nombre de recherches.Comment utiliser IF EXISTS en SQL (ifexists update, else insert in SQL)

Ce code change tous les enregistrements de la colonne (Pins) en texte recherché.

Où/Quelle est ma faute?

+2

Vous n'avez pas une clause where sur votre déclaration de mise à jour. Le plus gros problème est que c'est un exemple de manuel d'injection SQL. Vous devez paramétrer vos requêtes avant que les tables bobby ne soient visitées. http://bobby-tables.com/ –

+0

Je déplacerais ceci vers une procédure stockée afin que vous ayez un meilleur contrôle sur ce qui se passe et que vous puissiez le déboguer/le maintenir sans avoir à analyser cette grande chaîne méchante en quelque chose de lisible. –

Répondre

1

Vous devez avoir où mettre à jour tous les enregistrements. Cela réglerait .... mais est une requête horrible.

IF EXISTS(SELECT * FROM [Pins] WHERE Pin = 'searched.ToString()') 
BEGIN 
    UPDATE [Pins] SET SAY = SAY + 1 
    WHERE [Pin] = 'searched.ToString() ' 
END 
ELSE 
BEGIN 
    INSERT INTO Pins(SAY, Pin) VALUES (1, 'searched.ToString()') 
END 
1

Dans le code pseudo, vous dites

IF EXISTS(SELECT Statement) UPDATE ALL ROWS 

La bonne façon de le faire avec EXISTE est

UPDATE TABLE 
WHERE EXISTS(Correlated SELECT Statement) 
0

Vous avez manqué la clause WHERE.

Je préfère utiliser aussi Parameters au lieu de chaîne de requête concaténés (ce qui rend votre code ouvert aux attaques par injection SQL)

string searched = TextBox1.Text; // for example, text is 4477 

sorgu.CommandText = "IF EXISTS(SELECT * FROM [Pins] WHERE Pin = @searched) BEGIN UPDATE [Pins] SET SAY=SAY+1 WHERE Pin = @searched END ELSE BEGIN INSERT INTO Pins(SAY,Pin) VALUES (1, @searched) END"; 
sorgu.Parameters.AddWithValue("@searched", TextBox1.Text); 
+0

Merci Pradeep Kumar –