2013-08-05 18 views
0

我有一個數據庫表名Players(ID,Name,Scores)。 這裏是我的代碼與數據庫如何更新多行/如何在多條記錄上執行操作(C#,SQL Server)

private void playerList(int team1_ID) 
    { 
     try 
     { 
      if (con.State == ConnectionState.Closed) 
      { 
       con.Open(); 
      } 
      string query = "SELECT player_name AS [Player Name] , Score AS [Score] FROM Players WHERE Team_id= " + team1_ID; 

      SqlCommand cmd = new SqlCommand(query, con); 
      adapter = new SqlDataAdapter(cmd); 
      adapter.Fill(ds, "Players"); 
      dGridPlayers.DataSource = ds.Tables["Players"]; 
     } 
     catch (SqlException ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
      con.Close(); 
     } 
    } 

此代碼工作正常結合它。它返回一個11名球員列表和他們的分數。

現在我想對每個玩家的Score進行一些算術運算,並且想要將更新存儲回數據庫表。請告訴如何做到這一點。

我不想每次都打的SQL update每個球員的得分。我想完成操作後一氣呵成每一個球員的得分更新。

回答

0

更新記錄只是採用類似於marc_s建議的東西。

如果要更新所有記錄一次保持主鍵和新價值觀的結構是這樣

Dictionary<int, int> values = new Dictionary<int, int>(); 

關鍵的字典將持有該表的主鍵和值將是新的評分爲那個紀錄。 當你想通過所有使用的SqlCommand塊marc_s這些內部的更新數據庫只是循環顯示

using (SqlCommand cmd = new SqlCommand(updateQuery, con)) 
{ 
    // open connection, execute the UPDATE, close connection   
    conn.Open(); 
    foreach (KeyValuePair<int, int> row in values) 
    { 
     cmd.Parameters.Clear(); 
     cmd.Parameters.Add("@PK", SqlDbType.Int).Value = row.Key; 
     cmd.Parameters.Add("@Score", SqlDbType.Int).Value = row.Value; 
     cmd.ExecuteNonQuery(); 
    } 
    conn.Close(); 
} 
+0

感謝@Maisie ..你能告訴我如何對多個檢索行執行一些算術運算。 – prograshid

1

您需要定義

  • UPDATE SQL語句做你的更新
  • 呼叫UPDATE從C#代碼
  • 使用參數化查詢避免SQL注入和性能不佳!
  • 把你的SqlConnectionSqlCommand使用到using() {....}塊,以確保妥善處置

事情是這樣的:

// define your UPDATE query 
string updateQuery = "UPDATE dbo.Players SET Score = Score + @Value WHERE Team_id = @TeamID"; 

// two nested "using" blocks for conenction and command 
using (SqlConnection conn = new SqlConnection(.....)) 
using (SqlCommand cmd = new SqlCommand(updateQuery, con)) 
{ 
    // define the parameters and provide values 
    cmd.Parameters.Add("@Value", SqlDbType.Int).Value = someValue; 
    cmd.Parameters.Add("@TeamID", SqlDbType.Int).Value = teamID; 

    // open connection, execute the UPDATE, close connection   
    conn.Open(); 
    cmd.ExecuteNonQuery(); 
    conn.Close(); 
} 
+0

其實在我的代碼teamID是使用檢索特定隊的球員。所以我想通過他們的PlayerID更新球員比分。 檢索數據庫不是問題,問題是我想在每個玩家的「Score」字段中執行一些更新。 – prograshid

相關問題