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", "");
}
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
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. –