2010-11-27 6 views
0

ich eine Abfrage wie diese haben ....Zuordnungsfehler in der Abfrage geworfen

selectLeaveDetails = 
    "SELECT UL.[PK_ID],UD.FIRST_NAME + ' ' + UD.LAST_NAME AS REQUESTBY," + 
    "UL.[DATE_FROM] AS FROMDATE,UL.[DATE_TO] AS TODATE," + 
    "UL.LEAVE_REQUEST_ON AS REQUESTON," + 
    "REPLACE(UL.LEAVE_REQUEST_NOTES, '\n', '<br />') AS REQUESTNOTES," + 
    "STATUS=CASE " + 
    " WHEN UL.[LEAVE_STATUS] = '1' THEN 'ACTIVE' " + 
    " WHEN UL.[LEAVE_STATUS] = '-1' THEN 'CANCELLED' " + 
    " WHEN UL.[LEAVE_STATUS] = '2' THEN 'REPLACED' END," + 
    "UL.LEAVE_RESPONSE_ON AS RESPONSEON," + 
    "ULL.FIRST_NAME + ' ' + ULL.LAST_NAME AS RESPONSEBY," + 
    "UL.[LEAVE_RESPONSE_NOTES] AS RESPONSENOTES,UL.FK_LEAVE_REQUESTER " + 
    "FROM (M_USER_LEAVES UL " + 
    "INNER JOIN M_LEADERLED MLL ON MLL.LED_ID = MUD.PK_ID WHERE MLL.LEADER_ID = '" + Session["UserID"].ToString() ****" +**** 
    "LEFT JOIN M_USER_DETAILS UD ON UD.PK_ID = UL.FK_LEAVE_REQUESTER) " + 
    "LEFT JOIN M_USER_DETAILS ULL ON ULL.PK_ID = UL.FK_LEAVE_RESPONSE_BY " + 
    " WHERE UL.DATE_FROM BETWEEN '01/01/" + cmbYearList.SelectedItem.Text + "' AND '12/31/" + cmbYearList.SelectedItem.Text + "'" + 
    " AND UD.ACTIVE=1"; 

In der cmbYearList.SelectedItem.Text + "' AND '12/31/" + cmbYearList.SelectedItem.Text + "'" Abfrage ... nur Zuordnung, Schritt wird Dekrement Fehler ausgelöst

kann jemand helfen mich?

+0

Ein paar Punkte: Da Sie Ihre Abfrage verketten, öffnen Sie sich für SQL-Injektion - tun Sie es nicht !! Verwenden Sie stattdessen eine parametrisierte Abfrage. Außerdem: Wenn Sie für Datumsformate "01/01/..." und "12/31/..." verwenden, hängt Ihr Code von der Spracheinstellung auf Ihrem SQL Server ab - verwenden Sie stattdessen die ISO-8601-Formate "JJJJMMTT" - diese ** immer ** funktioniert unabhängig von Ihrer Sprache/regionalen Einstellungen –

Antwort

1

Ihre FROM-Klausel ist irgendwie ziemlich verstümmelt up:

FROM (M_USER_LEAVES UL 
     INNER JOIN M_LEADERLED MLL ON MLL.LED_ID = MUD.PK_ID 
     WHERE MLL.LEADER_ID = 'XXXX" 
     LEFT JOIN M_USER_DETAILS UD ON UD.PK_ID = UL.FK_LEAVE_REQUESTER) 

Sie haben eine INNER JOIN, dann eine WHERE Klausel, gefolgt von einem LEFT JOIN .... das scheint ziemlich merkwürdig ..... was genau sind versuchst du es hier zu tun ?? Warum müssen Sie dies in eine Unterabfrage stellen - können Sie nicht nur INNER JOIN und LEFT JOIN diese Tabellen in eine einzelne Anweisung und definieren Sie die notwendigen WHERE Einschränkungen?

Auch Ihre WHERE Klausel hier bekommt ein Apostroph Öffnen und ein Schließen doppelten Anführungszeichen - das wird nicht funktionieren ......

WHERE MLL.LEADER_ID = 'XXXX" 
        *** *** 

Sie benötigen eine SQL-Abfrage in SQL arbeiten zu erhalten Server Management Studio zuerst - dann übertragen Sie es in Ihren C# -Code.

Verwandte Themen