2011-10-03 111 views
1

我使用Oledb作爲我的數據庫,並且我試圖在用戶點擊和點擊時更新我的​​數據庫中的「狀態」列。所以它就像這樣..C#更新數據庫

當用戶點擊時,它會查詢數據庫的「狀態」列,它是之前的「IN」,「OUT」或空白。當被查詢爲「IN」時,狀態將被設置爲「OUT」,反之亦然。除了警告「NullReferenceException未處理」,每次運行它時我都會一直出現在這條線上,並且我無法繼續運行:str = cmd1.ExecuteScalar()。ToString ();

我對C#非常陌生,如果有人能詳細向我解釋我該如何解決這個問題,那會很好。謝謝!

 // prepare command string 
     string selectString = @"SELECT Status FROM jiahe where [Tag ID] = '" + textBox1.Text + "'"; 

     // 1. Instantiate a new command with command text only 
     OleDbCommand cmd = new OleDbCommand(selectString, objConnection); 

     // 2. Set the Connection property 
     cmd.Connection.Open(); 

     // 3. Call ExecuteNonQuery to send command 
     string str = cmd.ExecuteScalar().ToString(); 

     cmd.Connection.Close(); 

     if (str.Length == 2 || str.Length == 0) 
     { 

      //MessageBox.Show("Status: " + str); 

      // prepare command string 
      string updateString = @"update jiahe set Status = 'OUT' where [Tag ID] = '" + textBox1.Text + "'"; 

      // 1. Instantiate a new command with command text only 
      OleDbCommand cmd1 = new OleDbCommand(updateString, objConnection); 

      // 2. Set the Connection property 
      cmd1.Connection.Open(); 

      // 3. Call ExecuteNonQuery to send command 
      str = cmd1.ExecuteScalar().ToString(); 
      MessageBox.Show("Status: OUT"); 
      cmd1.Connection.Close(); 


     } 
     else 
     { 

      //string str1 = cmd2.ExecuteScalar().ToString(); 
      //MessageBox.Show("Status: " + str); 
      // prepare command string 
      string updateString = @"update jiahe set Status = 'IN' where [Tag ID] = '" + textBox1.Text + "'"; 

      // 1. Instantiate a new command with command text only 
      OleDbCommand cmd1 = new OleDbCommand(updateString, objConnection); 

      // 2. Set the Connection property 
      cmd1.Connection.Open(); 

      // 3. Call ExecuteNonQuery to send command 
      //string str1 = cmd2.ExecuteScalar().ToString(); 
      str = cmd1.ExecuteScalar().ToString(); 
      MessageBox.Show("Status: IN"); 
      cmd1.Connection.Close(); 
     } 

    } 
+0

你爲什麼要調用ExecuteScalar進行更新? –

回答

1

你打算叫ExecuteNonQuery,但你寫ExecuteScalar

請檢查您的線

// 3. Call ExecuteNonQuery to send command 
str = cmd1.ExecuteScalar().ToString(); 

我想這應該是

// 3. Call ExecuteNonQuery to send command 
str = cmd1.ExecuteNonQuery().ToString(); 
+0

謝謝你們,我明白了!是的,有點諷刺的是,我沒有執行我寫的內容,因爲有些人堅持我使用ExecuteScalar而不是ExecuteNonQuery,所以我沒有真正嘗試NonQuery,直到你們提到。我很笨:P –

1

執行標量返回select的第一行的第一列。您正在執行更新,更好的選擇是使用executenonquerry。

+0

我認爲這很具有諷刺意味,他已經將你的答案作爲直接調用ExecuteScalar之上的評論的一部分。 –

0

這很可能是因爲cmd1.ExecuteScalar()回報null和你正試圖調用其上的ToString()方法。 UPDATE查詢通常不會返回任何結果,因此您可能不應該使用ExecuteScalar而是ExecuteNonQuery來執行它。