【解決方法】C#の更新コードが機能しない


try
            {
                string updatequery = string.Format("Update Facultyleave set Faculty_ID = '{0}', LeaveType = '{1}', TotalBalance = '{2}', Month ='{3}', Days= '{4}', LeaveDate= '{5}', LeaveTime= '{6}', EndDate = '{7}', EndTime = '{8}', SanctionedLeave = '{9}', AvailedLeave = '{10}', Balance = '{11}', Reason = '{12}'" +
                    " where LeaveID = '{13}' ", txtID.Text.Trim(), cboLeaveType.Text.Trim(), txttotalleave.Text.Trim(), cboMonth.Text, NoOfDays.Text,
                    dtpLeavedate.Value.ToString("yyyy-MM-dd"), dtpLeaveTime.Value.ToString("HH:mm:ss"), dtpEndDate.Value.ToString("yyyy-MM-dd"),
                    dtpEndTime.Value.ToString("HH:mm:ss"), txtLSanctioned.Text, txtLAvailed.Text.Trim(),
                    txtBalance.Text, txtReasons.Text, Convert.ToString(dgvFacultyLeaveList.CurrentRow.Cells[0].Value).Trim());

                bool result = DatabaseAccess.UpdateData(updatequery);

                if (result)
                {
                    MessageBox.Show("Updated Successfully.");
                    EnableComponents();
                    FillGrid("");
                }
                else
                {
                    MessageBox.Show("Unexpected error occurred. Please contact the administrator.");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            } 

私が試したこと:

他の多くのコードを試してみましたが、データベースが更新されず、すべての値が正しいです

解決策 1

SQL インジェクション攻撃を回避し、デバッグを改善するためにコードの読みやすさを向上させるために、パラメーター化されたクエリを使用することをお勧めします。 参考のために上記のコメントにいくつかのリンクが提供されています。ここで開始する例を示します。

C#
string updatequery = "UPDATE Facultyleave SET Faculty_ID = @FacultyID, LeaveType = @LeaveType, TotalBalance = @TotalBalance, Month = @Month, Days = @Days, LeaveDate = @LeaveDate, LeaveTime = @LeaveTime, EndDate = @EndDate, EndTime = @EndTime, SanctionedLeave = @SanctionedLeave, AvailedLeave = @AvailedLeave, Balance = @Balance, Reason = @Reason WHERE LeaveID = @LeaveID";
using (SqlCommand cmd = new SqlCommand(updatequery, "SqlConnection"))
{
    cmd.Parameters.AddWithValue("@FacultyID", txtID.Text.Trim());
    cmd.Parameters.AddWithValue("@LeaveType", cboLeaveType.Text.Trim());
    // Add other parameters similarly with correct datatype and value...

    cmd.Parameters.AddWithValue("@LeaveID", Convert.ToString(dgvFacultyLeaveList.CurrentRow.Cells[0].Value).Trim());

    bool result = DatabaseAccess.UpdateData(cmd);

    // Rest of your code..
}

コメント

タイトルとURLをコピーしました