Как сохранить номер из базы данных Access, используя параметр? - PullRequest
1 голос
/ 15 марта 2019

Я хочу обновить количество голов, забитых игроком, поэтому, если он забил гол, я хочу обновить его количество голов.Мне нужно для этого получить количество голов, которые игрок имеет из базы данных, а затем сложить его с новым номером, выбранным на веб-сайте.Кто-нибудь может мне помочь, пожалуйста?

protected void SoccerTable_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    using (OleDbConnection sqlCon = new OleDbConnection(connectionStr))
    {
        sqlCon.Open();
        string query2 = "SELECT Achievement FROM SoccerAchievements WHERE PlayerCode = @id";
        OleDbCommand cmd = new OleDbCommand(query2, sqlCon);
        cmd.Parameters.AddWithValue("@id", Convert.ToInt32(SoccerTable.DataKeys[e.RowIndex].Value.ToString()));
        var reader = cmd.ExecuteReader();
        reader.Read();
        string SavedAchievementFromDB = reader["Achievement"].ToString();
        int b = int.Parse(SavedAchievementFromDB); // Trying to Save The num of Goals from DataBase to int
        int GoalsAfterSum = b + int.Parse(((SoccerTable.Rows[e.RowIndex].FindControl("AchNums") as DropDownList).Text.Trim())); // Trying to sum
        string query = "UPDATE SoccerAchievements SET Achievement='" + GoalsAfterSum + "' WHERE PlayerCode = @id"; // Trying to Update
        OleDbCommand sqlCmd = new OleDbCommand(query, sqlCon);
        sqlCmd.Parameters.AddWithValue("@Goals", (SoccerTable.Rows[e.RowIndex].FindControl("AchNums") as DropDownList).Text.Trim());
        sqlCmd.Parameters.AddWithValue("@id", Convert.ToInt32(SoccerTable.DataKeys[e.RowIndex].Value.ToString()));
        sqlCmd.ExecuteNonQuery();
    }
}

1 Ответ

1 голос
/ 15 марта 2019

Вам не нужно получать значение из базы данных перед обновлением, вы можете просто обновить значение в операторе SQL UPDATE SoccerAchievements SET Achievement = Achievement + @Goals.

    using (OleDbConnection sqlCon = new OleDbConnection(connectionStr))
    {
        sqlCon.Open();

        // get the goals from the web control
        string goalsText = (SoccerTable.Rows[e.RowIndex].FindControl("AchNums") as DropDownList).Text.Trim();

        // try to parse goals to int
        if (!int.TryParse(goalsText, out int goals))
        {
            // handle error
        }

        // try to parse user id to int
        if (!int.TryParse(SoccerTable.DataKeys[e.RowIndex].Value.ToString(), out int id))
        {
            // handle error
        }

        // increment the value in sql statement
        string query = "UPDATE SoccerAchievements SET Achievement = Achievement + @Goals WHERE UserID = @id";

        OleDbCommand sqlCmd = new OleDbCommand(query, sqlCon);
        sqlCmd.Parameters.AddWithValue("@Goals", goals);
        sqlCmd.Parameters.AddWithValue("@id", id));

        sqlCmd.ExecuteNonQuery();

        lblSuccessMessage.Text = "עריכת הנתונים התבצעה בהצלחה";
        lblErrorMessage.Text = "";
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...