2016-06-01 7 views
-4

Ich habe meine SQL-Abfrage, die Felder mit "wo" aus einer Variablen anzeigt. Ich habe meine Variable aus einer Funktion übergebenverhindern Escape-Zeichenfolge C#

String empCode welcher Wert

Hier ist mein Code "\\ (!":

public List<int> GetSuccessAndFailedCountForTodayForAgent(string empCode) 
{ 
    var result = new List<int>(); 
    string query = "SELECT (SELECT COUNT(*) FROM BusinessTransactions WHERE STATUS='Failed' AND ENTEREDDATE='" + DateTime.Now.Date.ToShortDateString() + "' AND AgentEmployeeCode='" + empCode + "') AS FAILED_COUNT, (SELECT COUNT(*) FROM BusinessTransactions WHERE STATUS='Completed' AND ENTEREDDATE='" + DateTime.Now.Date.ToShortDateString() + "' AND AgentEmployeeCode='" + empCode + "') AS SUCCESS_COUNT"; 
    using (SqlConnection conn = new SqlConnection(asynchPaymentDBConnectionString)) 
    { 
      conn.Open(); 
      using (SqlCommand s = new SqlCommand(query, conn)) 
      { 
       using (SqlDataReader reader = s.ExecuteReader()) 
       { 
        try 
        { 
         if (reader.HasRows) 
         { 
           while (reader.Read()) 
           { 
            result.Add(reader.GetInt32(0)); 
            result.Add(reader.GetInt32(1)); 
           } 
         } 
        } 
        catch (Exception ex) 
        { 
         //do something 
        } 
       } 
      } 
    } 
    return result; 
} 

In meinem C# wird das Ergebnis 0 - 0 was, wenn ich versuche, SQL Server direkt es ein Ergebnis von 2 zu zeigen - 0

Die Zeichenfolge ! \\ ( wird als behandelt! \ (

Wie kann ich meinen String verwenden! \\ ( meiner where-Klausel?

EDIT:

Ich versuchte Parametern hinzufügen:

s.Parameters.Add("@EmployeeCode", SqlDbType.NVarChar, 16); 
s.Parameters["@EmployeeCode"].Value = empCode; 

Immer noch nicht

funktioniert
+4

Versuchen Sie, Ihre Abfrage zu parametrisieren. –

+2

Ihr Code ist anfällig für [SQL-Injektion] (http://www.w3schools.com/sql/sql_injection.asp). Wie @FelixPamitan vorgeschlagen, sollten Sie [Parameter] (https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters%28v=vs.110%29.aspx) zum Erstellen verwenden Ihre Abfrage, anstatt nur Strings zu verketten. –

+0

Verknüpft als Duplikat http://StackOverflow.com/Questions/5468425/How-Do-Parameterized-queries-Help-AGainst-SQL-Injection Frage erläutert, was SQL-Injektion ist und zeigt, wie es zu beheben (was auch Ihr Problem lösen wird Sie versuchen, herumzuhacken) –

Antwort

0

Um einen umgekehrten Schrägstrich in C# String zu entkommen Sie entweder einen doppelten Schrägstrich oder Präfix verwenden können die ganze Zeichenfolge mit @, die die Zeichenfolge wörtlich behandelt und alle Zeichen entkommt.

I.e.

@"foo!\(bar" 

wird die Zeichenfolge

foo!\(bar 

bearbeiten produzieren: Sie können dies nur tun, wenn Sie die Zeichenfolge in der Variablen zuweisen, können Sie nicht eine Variable mit @ prefix.

Hoffe, dass hilft

+0

Wie kann ich es tun, wenn es von einer Variablen ist? Ich versuchte string id = @empCode und stattdessen ID verwenden aber funktioniert auch nicht – natsu1627

+0

Sie müssten dies verwenden, um die Zeichenfolge der Variablen zuzuweisen, aber Sie müssen es nicht erneut tun, wenn Sie die Variable verwenden. – Notts90

+0

Sie sollten Sie @ außerhalb der Anführungszeichen setzen – Notts90

Verwandte Themen