我有一个数据库表名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。我希望在完成操作后一次性更新每个玩家的分数。)
答案 0 :(得分:2)
您需要定义
UPDATE
SQL语句UPDATE
SqlConnection
和SqlCommand
的使用放入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();
}
答案 1 :(得分: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();
}