2009-06-29 13 views
4

Ich habe jemanden elses Code (C# ASP.Net), die die folgende Abfrage enthält:# in SQL Query

string query = "SELECT distinct(destinations.name) as Destinations 
       FROM destinations, flights 
       WHERE destinations.d_ID = flights.d_ID 
        AND flights.Date = #" + date.ToShortDateString() + "#"; 

ich nicht finden konnte, warum die # erforderlich ist hier vor und nach dem Zeitpunkt Parameter. Es könnte als normaler String-Wert (zwischen 'und') übergeben werden. Gibt es einen Vorteil von #?

Vielen Dank, Ali

+1

Sieht wie eine Rückkehr zur Access & VBA-Syntax aus. Was ist die DB-Servertechnologie? –

+2

Wie eine wirklich skizzenhafte Form des Schutzes gegen gebrochene Datumszeichenketten? Dies ist die Art von Dingen, wo gespeicherte Prozeduren dein Freund sind. – Brian

+0

Danke euch allen. Die verwendete Datenbank ist MS Access. –

Antwort

6

Ist dies gegen eine Access-Datenbank? Diese Plattform erfordert Daten eingeklammert werden durch die "#"

Edit: um Ihre Hauptfrage zu beantworten, nein, es sei denn, es ist Zugang, wo es erforderlich wäre, gibt es keinen Vorteil, die Hash-Marken in der Abfrage zu lassen.

+0

+1 zur Erklärung der Syntax. –

+0

Die # ist nicht erforderlich * für die Access-Datenbank-Engine. Anstatt beispielsweise das DATETIME-Literal # 7/1/2009 # zu verwenden, könnten Sie das Textliteral '2009-07-01' verwenden, das bei der Auswertung implizit zu DATETIME umgewandelt würde. Der Vorteil der Verwendung von Text besteht darin, zu vermeiden, dass Access das lokale kurze Datumsformat in das US-Format (mehrdeutig) ändert. – onedaywhen

3

, die den Zugriff Syntax ist, werden Sie sicher, dass Sie SQL Server verbinden, sind?

10

Es gibt nichts falsch mit dem Pfund-Symbol, aber es ist nicht ANSI-konforme SQL. Es ist viel besser, die Abfrage mit einem Parameter für das Datum neu zu schreiben.

ex: 

SqlCommand cmd = conn.CreateCommand(); 
cmd.CommandText = "SELECT distinct(destinations.name) as Destinations FROM destinations, flights WHERE destinations.d_ID = flights.d_ID AND flights.Date = @dateparm"; 
cmd.Parameters.Add(new SqlParameter("dateparm",value); 
SqlDataReader rdr = cmd.ExecuteReader(); 
+1

+1, die Pfundzeichen sind nicht das Problem, es ist die Verbindung, dass das Problem ist. Eine Sache zu beachten: SqlClient unterstützt benannte Parameter, andere Clients möglicherweise nicht. –