2016-12-10 1 views
0

Würden Sie mir bitte sagen, wo ist mein Fehler?!? Ich kann keine falsche Syntax in der Nähe von 's' finden! Hier ist mein Code:Weitere Informationen: Falsche Syntax in der Nähe von 's'

public static DataTable InsertConnect(ComboBox Site , ComboBox server , ComboBox Host , ComboBox Domain , Label Price) 
{ 
    SqlConnection cn = new SqlConnection(); 
    cn.ConnectionString = Server.Connection; 
    cn.Open(); 

    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = cn; 
    cmd.CommandText = "insert into tblPrice(Site,Server,Host,Domain,Price) 
     values('" + Site.Text + "','" + server.Text + "','" + Host.Text + "','" + Domain.Text + "','" + Price.Text + "')'"; 


    SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText, cn); 
    DataTable dt = new DataTable(); 
    da.Fill(dt); 
    return dt; 
} 
+0

Warum gibt es ein '' 'nach den letzten Klammern? –

+3

Ich würde wirklich vorschlagen, Parameter zu verwenden, um SQL-Injektion zu vermeiden, einfaches Beispiel hier: http://StackOverflow.com/Questions/17569051/SQLCommand-Insert-Into-Query-does-Not-Execute –

+0

@ J.Pichardo Ursache, wenn ich Geben Sie nicht 'Ich werde Fehler geben – VorTex318

Antwort

4

Der Grund, weil Sie Werte in die Abfrage nicht SqlParameter für vorbei.
Wenn Sie Parameter verwendet haben, dann haben Sie nicht so ein Problem wie einige zusätzliche ' Zeichen in Ihrer Abfrage.

Verwenden Sie immer SqlParameters.

public static DataTable InsertConnect(ComboBox Site , ComboBox server , ComboBox Host , ComboBox Domain , Label Price) 
{ 
    using (var cn = new SqlConnection(Server.Connection)) 
    { 
     cn.Open(); 

     using (var cmd = new SqlCommand()) 
     { 
      cmd.Connection = cn; 
      cmd.CommandText = "insert into tblPrice(Site,Server,Host,Domain,Price) values (@Site, @Server, @Host, @Domain, @Price)"; 
      var parameters = new[] 
      { 
       new SqlParameter { ParameterName = "@Site", .SqlDbType = SqlDbType.VarChar, .Value = Site.text }, 
       new SqlParameter { ParameterName = "@Server", .SqlDbType = SqlDbType.VarChar, .Value = server.text }, 
       new SqlParameter { ParameterName = "@Host", .SqlDbType = SqlDbType.VarChar, .Value = Host.Text }, 
       new SqlParameter { ParameterName = "@Domain", .SqlDbType = SqlDbType.VarChar, .Value = Domain.Text }, 
       new SqlParameter { ParameterName = "@Price", .SqlDbType = SqlDbType.VarChar, .Value = Price.Text } 
      } 
      cmd.Parameters.AddRange(parameters); 

      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      DataTable dt = new DataTable(); 

      da.Fill(dt); 
      return dt; 
     } 
    } 
} 

Dann können Sie Konstruktor SqlDataAdapter verwenden, die SqlCommand als Parameter übernimmt, weil Ihr cmd alle benötigten Informationen enthalten Abfrage für die Ausführung.

2

Das Problem ist wahrscheinlich in einem der Parameter, die einen Apostroph (') enthält. Versuchen Sie, cmd.CommandText auszudrucken, und Sie werden sehen, dass es kein gültiger SQL-Befehl ist.

In einem verwandten Hinweis, das ist die Grundlage der SQL-Injektion. Lösung besteht nicht darin, SQL-Befehle durch Verketten von Werten, insbesondere Strings, zu konstruieren. Verwenden Sie stattdessen Befehlsparameter und konstruieren Sie parametrisierte Befehle.

Sie können mehr über MSDN lernen: How to: Execute a Parameterized Query

Verwandte Themen