2017-05-08 3 views
0

ich eine Abfrage für die Tabelle Adapter erstellen, dieC# Hinzufügen von TableAdapter Query @parameter als int und Datum?

SELECT COUNT(*) FROM Trip WHERE ShipCode = @ShipCode 
          AND Date < @TodayPlusWeek 

Das Ding sah wie folgt aus ist diese Methode (string, string) als Parameter erwarten, wo ich es brauche int für die (ShipCode zu akzeptieren Datum) und für das (Datum)

Irgendwelche Ideen, wie das zu tun?

Sehr geschätzt!

+0

Bitte überprüfen Sie, dass die Strings innerhalb der Methode sind und dass die Sql-Spalten wie int & Datetime –

+0

die Spalten in der Tabelle sind bereits int und Datum –

+0

'SqlParameter' nimmt einen Typparameter. Gib einfach den richtigen Typ an. –

Antwort

0

wird der erste Teil ein Paar von Variablen des richtigen Typs einzurichten sein, um die richtigen Werte für die SQL-Parameter zu halten:

int iShipCode; 
DateTime dtTodayPlusWeek; 

Sobald Sie, dass, werden wir ein TryParse Verfahren laufen auf Ihre aktuellen String-Variablen in unsere neuen Variablen zu konvertieren. Da ich die Variablennamen in Ihrer Methode nicht kannte, generierte ich sie (strShipCode, strTodayPlusWeek). Wenn die TryParse-Methode fehlschlägt, können Sie Standardwerte für die Abfrage einrichten. Ich habe 0 und Heute + 1 Woche benutzt.

if (!int.TryParse(strShipCode, out iShipCode)) { 
    iShipCode = 0; 
} 
if (!DateTime.TryParse(strTodayPlusWeek, out dtTodayPlusWeek)) { 
    dtTodayPlusWeek = DateTime.Now.AddDays(7); 
} 

Jetzt, da wir korrekte Typen für die Daten haben, können wir diese zu unserer bestehenden Abfrage als Parameter hinzufügen.

StringBuilder sbCmd = new StringBuilder(); 
    sbCmd.Append("SELECT COUNT(*) "); 
    sbCmd.Append("FROM Trip "); 
    sbCmd.Append("WHERE (ShipCode = @ShipCode) "); 
    sbCmd.Append("AND Date < @TodayPlusWeek"); 

string txtCmd = sbCmd.ToString(); 

int iQryReturn; 

using (SqlCommand cmd = new SqlCommand(txtCmd, conn)) { 
    cmd.CommandType = CommandType .Text; 
    cmd.Parameters.AddWithValue("@ShipCode", iShipCode;); 
    cmd.Parameters.AddWithValue("@TodayPlusWeek", dtTodayPlusWeek); 

    try { 
     conn.Open(); 
     iQryReturn = (int)cmd.ExecuteScalar(); 
    } 
    catch(Exception ex) { 
     iQryReturn = -1; 
     // Your Exception handling here 
    } 
    finally { 
     conn.Close(); 
     // Your cleanup code if any 
    } 
} 

Nicht zu wissen, welche Art von DB-Setup Sie verwenden, habe ich dies in ADO für Sql Server geschrieben. Anzeige dort wird nur Wert zurückgegeben; Der Count (*), ich habe eine Integer-Variable für eine Rückkehr hinzugefügt. Wenn ein Fehler auftritt, wird dieser Wert auf -1 gesetzt.

Es liegt an Ihnen bei der Implementierung und den syntaktischen Änderungen, die für Ihre spezielle Anwendung benötigt werden.