2017-04-18 13 views
1

Hey alles, was ich die folgende Abfrage in meinem C# -Programm bin mit:C# SQL-Abfrage funktioniert in SSMS, aber nicht C#

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlDevConnection"].ConnectionString); 
SqlCommand command = new SqlCommand(Q, con); 
con.Open(); 

command.Parameters.AddWithValue("@val0", buildTblVal.ToString()); 
command.Parameters.AddWithValue("@val1", recordID); 
command.ExecuteNonQuery(); 
command.Dispose(); 
con.Close(); 

Scheint ich einen Fehler von Zusätzliche Informationen bekommen: falsche Syntax nahe dem Schlüsselwort ‚WHERE ". wenn es zum command.ExecuteNonQuery() kommt;.

Die Abfrage sieht wie folgt aus:

UPDATE 
    [tTrip] 
SET 
    @val0 
WHERE 
    RequestID = @val1 

Und wenn seine besiedelten sieht es wie folgt aus:

UPDATE 
    tT 
SET 
    RequestType=75, 
    TripLead='Barker, Bob', 
    Category=2, 
    RequestDate='2016-12-15', 
    ApproxDate='2016-12-15', 
    AtC='yes', 
    TStatus='New', 
    LastModifiedBy='bob\barker', 
    LastModifiedDate='2017-04-18 10:24 AM' 
WHERE 
    RequestID = 779 

ich den Fehler:

Zusätzliche Informationen: Falsche Syntax nahe dem Schlüsselwort 'WO'.

Wenn ich jedoch dieselbe Abfrage kopieren und in SSMS einfügen, läuft es einwandfrei.

Was würde ich vermissen?

+2

Sie müssen uns zeigen 'Q' –

+4

LastModified fehlt die Öffnung Zitat ' – Mangist

+0

Sie müssen auch uns buildTblVal zeigen –

Antwort

7

Parameter sind Wertplatzhalter, sie können keine sql-Klauseln, Anweisungen usw. sein. Aus diesem Grund schlägt es fehl, weil Sie keine ganze Zeichenfolge für die SET-Klausel als Parameter übergeben können.

Zum Beispiel sollten so Parameter verwendet werden.

UPDATE 
    tT 
SET 
    RequestType = @requestType, 
    TripLead = @tripLead, 
    Category = @category 
    -- etc 
WHERE 
    RequestID = @requestID 

Auf einer Seite beachten Sie es am besten Praxis betrachtet wird Ihre Instanzen in using Blöcke, in denen die Art IDisposable implementiert zu wickeln. Dies stellt sicher, dass Ressourcen auch im Fall einer Ausnahme immer freigegeben werden. Bei der Arbeit mit Datenbanken ist dies ein Muss, da es garantiert, dass Verbindungen nicht offen bleiben, bis die Müllentsorgung läuft (was nicht deterministisch ist).

using(SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlDevConnection"].ConnectionString)) 
using(SqlCommand command = new SqlCommand(Q, con)) 
{ 
    con.Open(); 
    // add parameters correctly based on above example 
    command.Parameters.AddWithValue("@val1", recordID); 
    command.ExecuteNonQuery(); 
} 
+1

In Ordnung, Igor krank ändern Sie es. Vielen Dank! – StealthRT

Verwandte Themen