2017-06-18 3 views
0

Ich verwende zwei Sitzungsvariable und ich zitiere die Sitzungsvariable zu einer anderen Variablen und ich zeige es den Wert korrekt aus der Sitzungsvariablen, aber wenn ich versuche, in MS Sql einzufügen Server Database der Wert wird nicht in die Datenbank eingefügt ... irgendeine Idee?Sitzungsvariablenwert speichert nicht in MS SQL-Server-Datenbank

Unten ist mein Code:

Session["selected"] = "apple"; 
Session["current"] = 1; 

string mycategory = Session["selected"].ToString(); 
int myId = Convert.ToInt32(Session["current"]); 

con.Open(); 
SqlCommand cmd = new SqlCommand("INSERT INTO [Marking] VALUES (@photoid, @photocategoryjudge, @totalmarks)", con); 
cmd.Parameters.Add("@photoid", SqlDbType.Int).Value = myId; 
cmd.Parameters.Add("@photocategoryjudge", SqlDbType.VarChar).Value = mycategory; 
cmd.Parameters.Add("@totalmarks", SqlDbType.Int).Value = totalMarks; 
cmd.ExecuteNonQuery(); 
con.Close(); 
+0

Hat 'totalMarks' eingestellt? Ist dies ein Pflichtfeld in der Tabelle "Markierung"? Gibt es andere Spalten in der Tabelle "Markierung", die Sie nicht mit dieser INSERT-Anweisung festlegen? Es könnte besser sein, explizit anzugeben, in welche Spalten Sie einfügen: 'INSERT INTO [Markierung] (PhotoID, PhotoCategory, TotalMarks) VALUES (...' – Skippy

+0

yup totalMarks wurde ebenfalls gesetzt und ich versuche INSERT INTO [Marking] (PhotoID, PhotoCategory, TotalMarks) VALUES (... dies speichert es immer noch nicht in der Datenbank ... –

+0

versuche zu debuggen, um zu sehen, welche Werte vor dem Einfügen vorhanden sind – TheGameiswar

Antwort

1

Ich habe nicht die Antwort, aber ich habe ein paar einfache Schritte für Sie, die Sie debuggen helfen, und die Basis davon sind gut Codierungsstandards und kann in einigen Variationen für zukünftige Projekte verwendet werden,

Das erste, was zu tun ist, e zu implementieren xception handling, und dies würde über einen try...catch...finally Block erfolgen. Sie werden Versuchen Sie den Code-Block für die Mehrheit der tatsächlichen SQL-Befehl, und wenn es einen Fehler gibt, wird es werfen Sie in den Catch Block. Wenn Sie der Ausnahme eine Variable zuweisen, können Sie den Mauszeiger darüber bewegen, um die Details zu überprüfen. Der Catch kann für verschiedene Bedingungen gestapelt werden, mit Ausnahme ist die letzte in seiner Art, die alle Arten von Ausnahmen abfangen wird. Das ist wie eine case Aussage, dass nur eine der Fangserien ausgelöst wird. Der letzte Teil dieses Blocks ist die Endgültige-Anweisung, die ausgeführt wird, nachdem die beabsichtigten Befehle beendet wurden oder die Ausnahmebehandlung erfolgt.

Was Sie nicht nutzt, dass die ExecuteNonQuery() Verfahren tatsächlich einen Rückgabewert hat (int32), die die Reihen Wert der SQL-Anweisung betroffen darstellt. Für eine einfache Insert-Anweisung sollte dies 1 sein. Wenn dies ein Aktualisierungsbefehl wäre, könnte dies 0 oder höher sein, abhängig davon, wie viele Zeilen es gibt oder irgendwelche Bedingungen. In jedem Fall wird es immer gleich oder größer als 0. Wie ich hier implementiert habe, wird es einen negativen Wert zuweisen, wenn es einen Fehler in der Codierung gibt, und einen anderen Wert für jede Art von Ausnahme.

Die letzte Sache ist, Ihren Code im Debug-Modus mit Breakpoints auszuführen. Wenn Sie den Haltepunkt erreichen, sehen Sie, welche Ihrer Variablen welche Werte haben. Dies wird hilfreich sein, um zu wissen, welcher Fehler überhaupt auftritt. Sie können Ihre Sql-Anweisung überprüfen und versuchen, sie direkt in SSMS auszuführen, wenn dies die Fehlerquelle ist.

Glück

Session["selected"] = "apple"; 
Session["current"] = 1; 

string mycategory = Session["selected"].ToString(); 
int myId = Convert.ToInt32(Session["current"]); 

int ra; //         ra = Rows Affected 

try { 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("INSERT INTO [Marking] VALUES (@photoid, @photocategoryjudge, @totalmarks)", con); 
    cmd.Parameters.Add("@photoid", SqlDbType.Int).Value = myId; 
    cmd.Parameters.Add("@photocategoryjudge", SqlDbType.VarChar).Value = mycategory; 
    cmd.Parameters.Add("@totalmarks", SqlDbType.Int).Value = totalMarks; 
    ra = cmd.ExecuteNonQuery(); 
} 
catch (SqlException sx) { 
    ra = -2; //        breakpoint here 
    // If you stop here, your SQL has an error. Hover on sx for detail 
    // Error handling routine 
catch (Exception ex) { 
    ra = -1; //        breakpoint here 
    // non-sql error block. Hover on ex for more info 
    // Error handling routine 
} 
finally { 

    con.Close(); 
} 

int Results = ra; //      breakpoint here