2012-03-13 5 views
0

У меня есть следующий код, и я пытаюсь выполнить подсчет и if (count) == 0, чем вставить else update.I не может показаться, чтобы выяснить, что не так. перейдите на следующую страницу, если запрос выполнен, но страница перезагружается и данные не вставлены или не обновлены. Это действие должно быть сделано, когда я нажимаю кнопку. Можете ли вы мне помочь? Я спросил раньше, но не answer.I не пытался сейчас, мой собственный, но не могу показаться, чтобы увидеть, что это problem.Sorry для повторенияcount then insert else update

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

Любые исключения? Выполняет ли 'SELECT count (*) из Распунсури, где id_intrebare = 2' возвращает любые строки? – sll

+0

Если не возвращается, я хочу вставить else update .. – Rares

+0

если нет строк, возвращайтесь и входите в раздел обновления. Это не приведет к ошибке, но ошибки и данные не будут вставлены. – Turbot

ответ

3

Когда я увязнуть в такого рода ситуациях я вернуться к хранимая процедура.

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 

теперь ваш код упрощает таким образом

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(); 
} 

Конечно, я сделал много предположений здесь на вашем столе, от типа колонок и длины.
Однако это будет относительно легко вместить. Теперь, если вы запустите свою хранимую процедуру из VS или SSMS, вы можете исключить ошибки в коде доступа к данным.

+0

, но без процедуры? – Rares

Смежные вопросы