2011-04-19 37 views
1

我在asp.net c#中創建了在線考試應用程序(基於Web)。在我的應用程序如何在asp.net中單擊前一個按鈕時插入非重複值

  • 第一種形式包含一個下拉列表 測試&啓動按鈕。

    當我從下拉列表中選擇一個特定的測試,然後點擊開始按鈕,它會進入下一頁。

  • 此頁面包含一個標籤 問題,單選按鈕列表爲 答案,下一個&上一個按鈕。

在第一種形式:開始按鈕的點擊事件,我創建了非重複的隨機值(對於問題id),即存儲在數組中。 當它重定向到另一個頁面時,那麼該數組中的第一個問題將顯示與答案&單擊下一個按鈕後,下一個問題將出現,這裏我已經插入選定的值(在radiobuttonlist中選擇的答案)用戶在數據庫中計算分數。 問題是點擊上一個按鈕,然後選擇另一個答案,然後再次插入記錄,因爲我想更新該值,而不是重複的值。我爲此寫了下面的代碼,但它不起作用。這裏

if (result != DBNull.Value) 

這種情況不能正常工作,因爲我想檢查該值是否存在。

請幫幫我嗎?

if (Convert.ToInt32(Session["Counter"]) <= 7) 
     { 
      //a is the array of random values where Counter is my counter start value=1 
      SqlCommand cmd = new SqlCommand("SELECT selected from Sel_Ans WHERE Quid=" + a[Convert.ToInt32(Session["Counter"]) - 1] + "", sqlconn); 
      sqlconn.Open(); 
      var result = cmd.ExecuteScalar(); 
      if (result != DBNull.Value) 
      { 
       cmd = new SqlCommand("Update Sel_Ans Set [email protected] WHERE Quid=" + a[Convert.ToInt32(Session["Counter"]) - 1] + "", sqlconn); 
       SqlParameter Selected = cmd.Parameters.Add("@Selected", SqlDbType.Int, 50); 

       Selected.Value = rb; 
       sqlconn.Close(); 
       sqlconn.Open(); 
       cmd.ExecuteNonQuery(); 
       sqlconn.Close(); 

      } 
      else 
      { 
       int t = Convert.ToInt32(Session["Counter"]); 

       cmd = new SqlCommand("INSERT INTO Sel_Ans VALUES ('1', @Quid, @Selected, '1')", sqlconn); 
       SqlParameter Quid = cmd.Parameters.Add("@Quid", SqlDbType.Int, 50); 
       Quid.Value = a[t - 2]; 

       SqlParameter Selected = cmd.Parameters.Add("@Selected", SqlDbType.Int, 50); 
       Selected.Value = rb; 
       sqlconn.Close(); 
       sqlconn.Open(); 
       cmd.ExecuteNonQuery(); 
       sqlconn.Close(); 
      } 
      sqlconn.Close(); 
     } 
+0

,因爲我要檢查值的存在與否這種情況下不能正常工作? – 2011-04-19 11:29:38

+0

你是什麼意思, 'if(result!= DBNull.Value) ' 包含你的代碼嗎? – 2011-04-19 11:30:22

+0

我想要插入選定的值,但如果該值已經存在,那麼在調試結果的值時應該更新不插入新值 – user707294 2011-04-19 11:35:52

回答

1

結果應該表明是否插入新記錄(重複鍵),如果不是,則更新記錄。

編輯:

SqlCommand cmd = new SqlCommand("SELECT Count(*)from Sel_Ans WHERE Quid=" + a[Convert.ToInt32(Session["Counter"]) - 1] + "", sqlconn); 

      sqlconn.Open(); 
      int result = cmd.ExecuteScalar(); 
      if (result != 0) 
+0

,但它沒有發生,它轉到(真條件)更新語句,而不是它應該去到(else)插入語句 – user707294 2011-04-19 12:14:21

+0

我想你的表有一個主鍵。因此,如果記錄已插入(主鍵違例),那麼插入新記錄(並且效果將存儲在結果變量中)的默認情況下,它將會更新。 – 2011-04-19 12:23:25

+0

當我分配主鍵然後它不工作,因爲當我點擊前面&選擇新的答案,然後它插入新記錄的問題ID(選定的值應該在這裏更新)這就是爲什麼我檢查是否存在或不存在,如果存在如果不存在則更新該值,然後插入這些值。最初這個表我保持空白,因爲我最後通過刪除查詢,所以當我運行項目時,那個表是空白的。問題是,這段代碼插入新記錄爲該問題ID(與新的選定答案),所以我怎麼能解決這個問題 – user707294 2011-04-19 12:39:11

相關問題