2012-03-13 2 views
0

J'ai le code suivant et j'essaie de faire un compte et si (compte) == 0 que d'insérer else mise à jour.Je n'arrive pas à comprendre ce qui ne va pas.La page devrait allez à la page suivante si la requête est terminée mais que la page ne se recharge et qu'aucune donnée n'est insérée ou mise à jour. Cette action doit être faite quand j'appuie sur un bouton. Pouvez-vous m'aider avec ceci? J'ai demandé avant, mais pas answer.I essayé maintenant par mon propre mais ne peut pas l'impression de voir quel est le problem.Sorry pour répétercompter puis insérer d'autre mise à jour

string ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 
      if (string.IsNullOrEmpty(ip)) 
      { 
       ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 
      } 


      String id_sesiune; 
      id_sesiune = Session.SessionID; 

      SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["chestionar"].ConnectionString); 
      con.Open(); 
      SqlCommand cmd1 = new SqlCommand("SELECT count(*) from Raspunsuri where id_intrebare=2",con); 

      int read = Convert.ToInt16(cmd1.ExecuteScalar()); 


      if (read == 0) 
      { 
       SqlCommand cmd = new SqlCommand("INSERT INTO Raspunsuri Values(@raspuns,@cnp,@data,'2',@ip,@idsesiune)", con); 
       cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]); 
       cmd.Parameters.AddWithValue("@raspuns", textbox2.Text); 
       cmd.Parameters.AddWithValue("@data", DateTime.Now.ToLocalTime()); 
       cmd.Parameters.AddWithValue("@ip", ip); 
       cmd.Parameters.AddWithValue("@idsesiune", id_sesiune); 

       try 
       { 
        con.Open(); 
        cmd.ExecuteNonQuery(); 
        Response.Redirect("User3.aspx"); 
       } 

       catch (Exception ex) 
       { 
        Console.WriteLine("Error:" + ex); 
       } 
       finally 
       { 
        con.Close(); 
       } 


      } 

      else 
      { 

       SqlCommand cmd = new SqlCommand("UPDATE Raspunsuri SET [email protected],[email protected],[email protected],id_intrebare=2,[email protected],[email protected] WHERE id_intrebare=2", con); 
       cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]); 
       cmd.Parameters.AddWithValue("@raspuns", textbox2.Text); 
       cmd.Parameters.AddWithValue("@data", DateTime.Now.ToLocalTime()); 
       cmd.Parameters.AddWithValue("@ip", ip); 
       cmd.Parameters.AddWithValue("@idsesiune", id_sesiune); 

       try 
       { 
        con.Open(); 
        cmd.ExecuteNonQuery(); 
        Response.Redirect("User3.aspx"); 
       } 

       catch (Exception ex) 
       { 
        Console.WriteLine("Error:" + ex); 
       } 
       finally 
       { 
        con.Close(); 
       } 

      } 
+0

Des exceptions? Est-ce que 'SELECT compte (*) à partir de Raspunsuri où id_intrebare = 2' renvoie des lignes? – sll

+0

si ne retourne pas je veux faire l'insertion sinon la mise à jour .. – Rares

+0

s'il n'y a pas de retour de lignes et d'intervenir pour mettre à jour la section. Cela ne déclencherait pas d'erreur, mais aucune erreur et aucune donnée ne seront insérées. – Turbot

Répondre

3

Quand je suis pris dans ce genre de situations que je vais revenir à un stocké procédure.

CREATE PROCEDURE UpsertRasPunsuri(@keyID int, @cnp int, @raspuns nvarchar(30), 
        @data smalldatetime, @ip nvarchar(30), @idsesiune int) 
    AS 
    BEGIN 
     declare @cnt int 
     SELECT @cnt = count(*) from Raspunsuri where [email protected] 
     if @cnt = 0 
      INSERT INTO Raspunsuri Values(@raspuns,@cnp,@data,2,@ip,@idsesiune) 
     else 
      UPDATE Raspunsuri SET 
        [email protected],[email protected],[email protected], 
        id_intrebare=2,[email protected],[email protected] 
      WHERE [email protected]  
    END 

maintenant votre code simplifie cette manière

try 
{ 
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["chestionar"].ConnectionString); 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("UpsertRasPunsuri",con); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.AddWithValue("@keyID", 2); 
    cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]); 
    cmd.Parameters.AddWithValue("@raspuns", textbox2.Text); 
    cmd.Parameters.AddWithValue("@data", DateTime.Now.ToLocalTime()); 
    cmd.Parameters.AddWithValue("@ip", ip); 
    cmd.Parameters.AddWithValue("@idsesiune", id_sesiune); 
    con.Open(); 
    cmd.ExecuteNonQuery(); 
    Response.Redirect("User3.aspx"); 
} 

catch (Exception ex) 
{ 
    Console.WriteLine("Error:" + ex); 
} 
finally 
{ 
    con.Close(); 
} 

Bien sûr, je fait beaucoup d'hypothèses ici sur votre table, sur le type et la longueur des colonnes.
Cependant, cela sera relativement facile à adapter. Maintenant, si vous exécutez votre procédure stockée à partir de VS ou de SSMS, vous pouvez exclure des erreurs dans le code d'accès aux données.

+0

mais sans procédure? – Rares

Questions connexes