2016-06-06 13 views
-2

Ich versuche, eine SQL-Zeichenfolge mit einem optionalen Wert zu schaffen ...C# KUMULATIVE ADDWITHPARAMETER SQL

Wenn ein Combobox einen selecte Wert hat, wird der Parameter einen gehören die „AND NOMEEVENTO =‚blablabla‘“ -Teil ...

Andernfalls fügt der Parameter dem Satz nur ein Leerzeichen hinzu.

Aber es funktioniert nicht.

Die einzige Hilfe, die ich bekommen ist

Syntax error near @vOper

Der Code ist:

  SqlConnection conn = new SqlConnection(Properties.Settings.Default.Connect); 
      conn.Open(); 
      SqlCommand sc = new SqlCommand(@"DELETE FROM TBLANCAMENTO WHERE DATALCT >= CONVERT(datetime, @vDATAINI , 103) AND DATALCT <= CONVERT(datetime, @vDATAFIM, 103) @vOper", conn); 
      sc.Parameters.AddWithValue("@vDATAINI", dateTimePicker1.Value.ToShortDateString()); 
      sc.Parameters.AddWithValue("@vDATAFIM", dateTimePicker2.Value.ToShortDateString()); 

      if (comboBox1.Text.ToString() != "") 
      { 
      sc.Parameters.AddWithValue("@vOper", " AND NOMEEVENTO=" + comboBox1.Text.ToString()); 
      } 

      else 
      { 
      sc.Parameters.AddWithValue("@vOper", ""); 
      } 
+0

Sie brauchen keine DTP-Wert Zeichenfolge zu konvertieren, so dass Sie es zurück auf ein Datum in SQL konvertieren. Wenn @vOper optional ist, müssen Sie es bei der Deaktivierung nicht in SQL verwenden. Und Sie sollten 'Add' nicht' AddWithValue' verwenden. – Plutonix

+0

Ich weiß, dass ich DTP-Wert nicht in String konvertieren muss ... Aber das Datum DATALCT Feld ist tricly, wie es ihre Werte von verschiedenen Quellen erhält, die möglicherweise, oder möglicherweise nicht, include hh: mm: ss Daten. Um sicherzustellen, dass meine Zeichenfolge Ergebnisse nur basierend auf TT/MM/JJJJ, die die Uhrzeit des Tages ignoriert, zurückgeben, habe ich diese Konvertierung auf beiden Seiten. Ich weiß, dass dies Leistung teuer ist, aber das war ein kleineres Problem für jetzt. Wie auch immer, danke für die Beobachtung, ich werde hier nach einer Verbesserung suchen. Sicher ist das keine nette Lösung. –

Antwort

0

Sie den Apostroph verpassen, Grund für einen Apostroph aufweist, ist seine String ...

sc.Parameters.AddWithValue ("@ vOper", "UND NOMEEVENTO = '" + (ComboboxItem) comboBox1.SelectedItem.Text +' ";

Versuchen Sie, diese

+0

Während dieser Code die Frage beantworten kann, verbessert ein zusätzlicher Kontext, warum und/oder wie dieser Code die Frage beantwortet, seinen langfristigen Wert. – ryanyuyu

+0

Danke, Sicherlich die ‚‘ Teil der Lösung ist, aber ich bin immer noch die Fehlermeldung: Eine nicht behandelte Ausnahme des Typs ‚System.Data.SqlClient.SqlException‘ aufgetreten in System.Data.dll Zusatz Information: Falsche Sintaxe in der Nähe von '@ vOper'. –

+0

aktualisiert mit (ComboboxItem) comboBox1.SelectedItem.Text –

0

versuchen, diesen Ansatz

using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.Connect)) 
using (SqlCommand sc = new SqlCommand()) 
{ 
    conn.Open(); 
    sc.Connection = conn; 

    if (comboBox1.Text != "") 
    { 
     sc.CommandText = @" 
      DELETE FROM TBLANCAMENTO 
      WHERE DATALCT >= CONVERT(datetime, @vDATAINI, 103) 
       AND DATALCT <= CONVERT(datetime, @vDATAFIM, 103) 
       AND NOMEEVENTO = @vOper"; 

     sc.Parameters.AddWithValue("@vOper", comboBox1.Text); 
    } 
    else 
    { 
     sc.CommandText = @" 
      DELETE FROM TBLANCAMENTO 
      WHERE DATALCT >= CONVERT(datetime, @vDATAINI, 103) 
       AND DATALCT <= CONVERT(datetime, @vDATAFIM, 103)"; 
    } 

    sc.Parameters.AddWithValue("@vDATAINI", dateTimePicker1.Value.ToShortDateString()); 
    sc.Parameters.AddWithValue("@vDATAFIM", dateTimePicker2.Value.ToShortDateString()); 

    // other code 
}