2015-10-05 31 views
0

我有一個服務器程序將存儲客戶端發送的某些數據。一個數據是客戶端的主機名。服務器將檢查主機名是否存在,如果不存在,則會插入新的數據。它應該看起來像這樣。檢查表是否爲空後插入數據

hostname_id | hostname 
------------------------ 
     1  | Admin 
     2  | Guest_PC 
     3  | Bob_PC2 

我的問題是它不會存儲新插入的數據。它一直返回零,但不存儲任何東西。這裏是我的代碼。(編輯,以正確的版本)

string constring = "Database=chtbuster;Data Source=localhost;User Id=root;Password=''"; 
    string count1 = "SELECT COUNT(hostName) FROM chtbuster.hostnametable WHERE [email protected] "; 
    using (MySqlConnection conDataBase = new MySqlConnection(constring)) 
    { 
      MySqlCommand cmd1Database = new MySqlCommand(count1, conDataBase); 
      conDataBase.Open(); 

      long count = (long)cmd1Database.ExecuteScalar(); 
      if (count == 0) 
      { 
        string insert_ht = "INSERT INTO chtbuster.hostnametable(hostName) VALUES(@machineName);"; 
        MySqlCommand cmd5Database = new MySqlCommand(insert_ht, conDataBase); 

        cmd5Database.Parameters.AddWithValue("@machineName", machineName); 
        cmd5Database.ExecuteNonQuery(); 
        //*test* output.Text += "\n Empty " + count; 
      } 
      else 
      { 
        //not empty, insert other data 
      } 

} 

我已經編寫PHP數據庫之前,是新的C#數據庫,我很困惑。請幫忙。謝謝。

+1

您需要_execute_您創建的SQL插入命令.... DOH! –

+0

@SteveWellens先生我是C#數據庫的新手。它是ExecuteNonQuery();? – charlie9495

回答

1

您可以在一個步驟做到這一點與存在:

IF NOT EXISTS (SELECT hostName FROM chtbuster.hostnametable WHERE [email protected]) 
    INSERT INTO chtbuster.hostnametable(hostName_id) VALUES(@machineName); 

正如評論所說,你需要執行查詢得到的結果。

+0

先生?是否可以問我是否應該如何輸出選定的查詢? string gethostname_id =「SELECT INTO chtbuster.hostnametable(hostName_id)WHERE hostName = @ machineName」; – charlie9495

+1

查詢在我的答案中沒有返回值。在執行時,如果你想返回一個值,你可以使用ExecuteScalar(就像你上面做的那樣),或者ExecuteReader返回一個包含任何查詢結果的數據讀取器。 –

+1

如果你想封裝你的邏輯並返回一些有意義的東西,可以在db中寫一個存儲過程。然後,你的邏輯在你的應用程序的某些sql中不是硬編碼的。 –