Одной из наиболее распространенных проблем, с которыми сталкиваются многие веб-разработчики в своих веб-приложениях, является то, что дубликаты записей вставляются в базу данных при обновлении страницы.Если веб-страница содержит текстовое поле и кнопку для отправки данных текстового поля в базу данных.В этом случае, когда пользователь вставляет некоторые данные в текстовое поле и нажимает кнопку «Отправить», он сохраняет запись в базе данных, а затем, если пользователь немедленно обновляет веб-страницу, то та же самая запись снова сохраняется в базе данных, как есть.нет уникальных ключей, которые можно использовать для проверки существования данных, чтобы предотвратить многократную вставку.
Из этого поведения мы можем точно знать, что на свежей странице запускается событие нажатия кнопки.Чтобы избежать этой проблемы, мы можем попробовать этот метод, как описано ниже.
При событии загрузки страницы сохраните отметку даты / времени в переменной сеанса, при первой загрузке страницы переменная сеанса заполняется текущей датой./ время следующим образом:
* void Page_Load (Отправитель объекта, EventArgs e) {if (! IsPostBack) {Session ["update"] = Server.UrlEncode (System.DateTime.Now.ToString ());}} *
В событии PreRender страницы для переменной ViewState устанавливается значение переменной Session следующим образом:
void Page_PreRender(object obj,EventArgs e)
{
ViewState["update"] = Session["update"];
}
Затем эти два значения сравниваются с каждымдругое непосредственно перед выполнением команды INSERT для базы данных.Если они равны, то команда может быть выполнена, а переменная Session обновляется с использованием текущей даты / времени, в противном случае команда игнорируется, как указано ниже:
void btnSubmit_Click(object obj, EventArgs e)
{
string name = "";
string qualification = "";
if (Session["update"].ToString() == ViewState["update"].ToString())
{
if (txtName.Text != "" || txtName.Text != null)
{
name = txtName.Text.ToString();
}
if (txtQualification.Text != "" || txtQualification.Text != null)
{
qualification = txtQualification.Text.ToString();
}
//--- Insert data function should be execute here
string strSql = "INSERT INTO Testdata (Name,Qualification) VALUES ('" + name + "','" + qualification + "')";
SqlConnection ANConnection = new SqlConnection(ConnectionString);
ANConnection.Open();
SqlCommand ANCommand = new SqlCommand(strSql, ANConnection);
ANCommand.ExecuteNonQuery();
ANConnection.Close();
ANConnection.Dispose();
//--End of save data
lblMessage.Text = "Inserted Record Sucessfully
Session["update"] = Server.UrlEncode(System.DateTime.Now.ToString());
}
else
{
lblMessage.Text = "Failure – Due to Page Refresh";
txtName.Text = "";
txtQualification.Text = "";
}
}