Aktualisieren, wenn der name vorhanden sonst insert - SQL-Server
Ich will update in meiner Tabelle, wenn meine angegebene Dateiname ist bereits in meiner Datenbank, was ich will, um eine neue Zeile einzufügen. Ich versuche diesen code, aber die EXISTS
angezeigt Fehler-bitte geben Sie mir den richtigen Weg, denn iam frischer in SQL
public void SaveData(string filename, string jsonobject)
{
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=;Integrated Security=True");
SqlCommand cmd;
SqlCommand cmda;
if EXISTS("SELECT * FROM T_Pages WHERE pagename = '" + filename + "") {
cmda = new SqlCommand("UPDATE T_Pages SET pagename='" + filename + "',pageinfo='" + jsonobject + "' WHERE pagename='" + filename + "'", con);
cmda.ExecuteNonQuery();
}
else {
cmd = new SqlCommand("insert into T_Pages (pagename,pageinfo) values('" + filename + "','" + jsonobject + "')", con);
cmd.ExecuteNonQuery();
}
con.Close();
}
- Was ist
if EXISTS
? Sie sind in C# - code. Sie können nicht schreiben, SQL-syntax in C# - code - Hast du definieren/implementieren VORHANDEN Funktion? Sie müssen.
MERGE
ist für diesen Zweck- Zu kompliziert.....:-) Ich Vertrauen ihm nicht
- MERGE ist eine schlechte Wahl, hier, verwenden Sie, WENN VORHANDEN/INSERT/UPDATE in einem einzelnen batch.
- Hallo, sehen Sie sich bitte die LINK ich denke, Sie werden es nützlich finden.
- Hast du gesehen, die ersten beiden Kommentare? Der code wird nicht kompiliert, wenn
EXISTS
ist nicht implementiert, irgendwo, so dass ich werde zu erraten, zumindest müssen Sie dann das schließende einfache Anführungszeichen umfilename
imif
- Anweisung. - SQL-Injection-Alarm Sie sollten nicht verketten Sie zusammen Ihre SQL-Anweisungen - verwenden Sie parametrisierten Abfragen statt zur Vermeidung von SQL-injection
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie
IF EXISTS()
Teil auf dem serverusing() {....}
blocks usw.Versuchen, diesen code:
Wie über die Verwendung einer MERGE-Anweisung?
Natürlich mit Parametern zu vermeiden, die Gefahr von SQL-injection.
Erstellen einer Gespeicherten Prozedur auf die Datenbank entlang der Linien von
Und rufen, dass aus Ihrem code. Sie sollten wirklich tun, die mit einer parametrierten Befehl (Es wird vielen anderen Fragen berät Sie auf dem besten Weg, das zu tun). Wenn Sie bereit sind, führen Sie das Risiko von SQL-injection-Angriffe und bereue es überhaupt nicht versagt, wenn es ein Apostroph-Zeichen in Ihren Daten, dann können Sie es tun, die schnelle und schmutzige Art und Weise, wie diese
Kann man dies getan, mit einer Abfrage
wo Sie wollen, um decalre flag variable vom Typ int ( Sie machen es auch vom Typ tinyint, es ist bis zu Ihnen), und wenn die Zählung 0 ist, bedeutet, dass keine Zeilen ,was Sie aktualisieren Sie Ihre Abfrage