2017-02-16 6 views
0

Ich muss Text aus einem asp.net-Webformular einfügen. Die letzte Einfügung in meiner Zeichenfolge muss den Wert aus einer Spalte basierend auf einem überprüften TreeView-Wert einfügen. Ich muss eine Unterabfrage in meiner Einfügeanweisung ausführen, die SQL-Injektion vermeidet. Der aktuelle Code fügt einen Nullwert und nicht den Wert aus der SELECT-Anweisung ein.Einfügen von Abfrage mit Sub-Abfrage asp.net

Dies ist mein Code:

string content = TxtContent.Text; 
string Pagename = txtKeywords.Text; 
string title = TxtPageName.Text; 
string description = TxtDescription.Text; 
string URL = TxtPageName.Text; 
string Keywords = txtKeywords.Text; 
string tree = TreeView1.SelectedValue; 

string query = @"INSERT INTO Menus([content], [Pagename], [title], [description], [Keywords], [url], [ParentMenuId]) " + "Values('" + content + "', '" + Pagename + "', '" + title + "', '" + description + "', '" + Keywords + "', '/" + URL + "', (Select [parentmenuid] from [menus] where [title] ='"+tree+"'))"; 

using (SqlConnection connection = new SqlConnection("Data Source=MYConnectionString")) 
{ 
    using (SqlCommand command = new SqlCommand(query, connection)) 
    { 
     connection.Open(); 
     command.ExecuteNonQuery(); 
    } 
} 
+0

Bitte werfen Sie einen Blick auf [SQL-Injection-Angriffe] (https://en.wikipedia.org/wiki/SQL_injection), weil Ihre aktuellen Code mit diesem Problem ist gespickt. –

Antwort

0

Laut MSDN, Sie Benutzer dynamische Abfragen ähnlich der folgenden (http://ud.ht/bDhf prüfen Schritt 3)

Erstellen Sie zunächst ein Objekt der "SqlDataAdaptor" kann Klasse. Weisen Sie dann für jede Variable einen beliebigen Namen zu und fügen Sie ihn dem Befehl hinzu.

using System.Data; 
using System.Data.SqlClient; 

using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    DataSet userDataset = new DataSet(); 
    SqlDataAdapter myDataAdapter = new SqlDataAdapter(
     "SELECT au_lname, au_fname FROM Authors WHERE au_id = @au_id", 
     connection);     
    myDataAdapter.SelectCommand.Parameters.Add("@au_id", SqlDbType.VarChar, 11); 
    myDataAdapter.SelectCommand.Parameters["@au_id"].Value = SSN.Text; 
    myDataAdapter.Fill(userDataset); 
} 
+0

Danke für die Richtung auf der sql-Injektion. Kann ich jetzt Hilfe mit der insert-Anweisung bekommen? Derzeit fügt es den tatsächlichen Text aus der Sub-Select-Anweisung ein. – Joel

Verwandte Themen