1

我有一个数据库表名Players(ID、名称、分数)。这是我将其与数据库绑定的代码

    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每个玩家执行一些算术运算,并希望将(更新)存储回数据库表。请告诉如何做到这一点。

我不想每次都update为每个玩家的分数打SQL。我想在完成操作后一次性更新每个玩家的分数。

4

2 回答 2

2

你需要定义

  • 用于更新的UPDATESQL 语句
  • 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();
}
于 2013-08-05T04:31:32.147 回答
0

要更新记录,只需应用类似于 marc_s 建议的内容。

如果您想一次更新所有记录,请将主键和新值保留在这样的结构中

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

字典的键将保存表的主键,值将是该记录的新分数。当您想要更新数据库时,只需在 using 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();
}
于 2013-08-05T08:28:25.433 回答