Есть ли другой эффективный способ обновления данных в базе данных внутри GridView? ⇐ C#
-
Anonymous
Есть ли другой эффективный способ обновления данных в базе данных внутри GridView?
Здесь я делаю процесс вставки и обновления данных внутри GridView в базе данных. Я столкнулся с небольшой проблемой, когда дело доходит до обновления. Когда я вставляю данные в несколько строк GridView, они обновляют только последнюю строку GridView. Если TDR_CODE уже существует в базе данных и, скажем, внутри таблицы есть 3 строки, то все 3 строки будут иметь то же значение, что и последняя строка GridView. Ниже приведены соответствующие коды, и они должны проверять наличие TDR_CODE внутри таблицы. Если его не существует, то счетчик будет равен 0, а если есть, то счетчик будет >0.
Ниже приведены коды
protected void GLType() { строка QueryCheckExistingTDRCode = "SELECT COUNT(*) FROM table WHERE TDR_CODE = :TDR_CODE"; используя (OracleCommand CheckExistingTDRCodeCmd = новый OracleCommand (QueryCheckExistingTDRCode, con)) { CheckExistingTDRCodeCmd.Parameters.Add("TDR_CODE", OracleDbType.Varchar2).Value = TextBoxTDRCode.Text; int count = Convert.ToInt32(CheckExistingTDRCodeCmd.ExecuteScalar()); если (счет == 0) { ВставитьДанныеGLТип(); } еще { ОбновлениеДанныхGLТип(); } } } защищенная пустота InsertDataGLType() { строка InsertQuery = "Таблица INSERT INTO (TDR_CODE, GL_TYPE, GL_ACCNO) VALUES (:TDR_CODE, :GL_TYPE, :GL_ACCNO)"; пытаться { List updateItems = новый List(); foreach (строка GridViewRow в GridViewSelection.Rows) { DropDownList ddlGLType = (DropDownList)row.FindControl("DropDownListGLType"); TextBox txtGLaccNo = (TextBox)row.FindControl("TextBoxGLAccNo"); if (!string.IsNullOrEmpty(ddlGLType.SelectedValue) && !string.IsNullOrEmpty(txtGLAccNo.Text)) { // Добавляем данные в список updateItems.Add(новый UpdateDataItem { TDRCode = TextBoxTDRCode.Text, GLType = ddlGLType.SelectedValue, GLAccNo = txtGLAccNo.Text }); } } // Теперь обновляем базу данных данными из списка используя (OracleCommand InsertNewDataCmd = новый OracleCommand (insertQuery, con)) { InsertNewDataCmd.Parameters.Add("TDR_CODE", OracleDbType.Varchar2); InsertNewDataCmd.Parameters.Add("GL_TYPE", OracleDbType.Varchar2); InsertNewDataCmd.Parameters.Add("GL_ACCNO", OracleDbType.Varchar2); foreach (элемент var в updateItems) { InsertNewDataCmd.Parameters["TDR_CODE"].Значение = item.TDRCode; InsertNewDataCmd.Parameters["GL_TYPE"].Значение = item.GLType; InsertNewDataCmd.Parameters["GL_ACCNO"].Value = item.GLaccNo; InsertNewDataCmd.ExecuteNonQuery(); } } } поймать (OracleException oracleEx) { LabelWarning.Text = "Ошибка Oracle: " + oracleEx.Message; } улов (FormatException formatEx) { LabelWarning.Text = "Ошибка формата: " + formatEx.Message; } поймать (Исключение ex) { LabelWarning.Text = "Ошибка: " + ex.Message; } окончательно { если (string.IsNullOrEmpty(LabelWarning.Text)) { LabelWarning.Text = "Операция прошла успешно!"; } } } Ниже приведены проблемные коды обновления
protected void UpdateDataGLType() { string updateQuery = «ОБНОВЛЕНИЕ таблицы SET GL_TYPE = :GL_TYPE, GL_ACCNO = :GL_ACCNO WHERE TDR_CODE = :TDR_CODE»; пытаться { List updateItems = новый List(); foreach (строка GridViewRow в GridViewSelection.Rows) { DropDownList ddlGLType = (DropDownList)row.FindControl("DropDownListGLType"); TextBox txtGLaccNo = (TextBox)row.FindControl("TextBoxGLAccNo"); if (!string.IsNullOrEmpty(ddlGLType.SelectedValue) && !string.IsNullOrEmpty(txtGLAccNo.Text)) { // Добавляем данные в список updateItems.Add(новый UpdateDataItem { TDRCode = TextBoxTDRCode.Text, GLType = ddlGLType.SelectedValue, GLAccNo = txtGLAccNo.Text }); // При необходимости здесь можно выполнить дополнительные действия } } // Теперь обновляем базу данных данными из списка используя (OracleCommand UpdateCmd = новый OracleCommand (updateQuery, con)) { UpdateCmd.Parameters.Add("TDR_CODE", OracleDbType.Varchar2); UpdateCmd.Parameters.Add("GL_TYPE", OracleDbType.Varchar2); UpdateCmd.Parameters.Add("GL_ACCNO", OracleDbType.Varchar2); foreach (элемент var в updateItems) { UpdateCmd.Parameters["TDR_CODE"].Значение = item.TDRCode; UpdateCmd.Parameters["GL_TYPE"].Value = item.GLType; UpdateCmd.Parameters["GL_ACCNO"].Value = item.GLAccNo; UpdateCmd.ExecuteNonQuery(); } } } поймать (OracleException oracleEx) { LabelWarning.Text = "Ошибка Oracle: " + oracleEx.Message; } улов (FormatException formatEx) { LabelWarning.Text = "Ошибка формата: " + formatEx.Message; } поймать (Исключение ex) { LabelWarning.Text = "Ошибка: " + ex.Message; } окончательно { если (string.IsNullOrEmpty(LabelWarning.Text)) { LabelWarning.Text = "Операция прошла успешно!"; } } } Ниже приведены коды обновления, которые не вызывают проблем.
protected void UpdateDataGLType() { строка deleteQuery = "УДАЛЕНИЕ ИЗ таблицы WHERE TDR_CODE = :TDR_CODE"; используя (OracleCommand deleteCmd = новый OracleCommand(deleteQuery, con)) { deleteCmd.Parameters.Add("TDR_CODE", OracleDbType.Varchar2).Value = TextBoxTDRCode.Text; пытаться { deleteCmd.ExecuteNonQuery(); } поймать (OracleException oracleEx) { LabelWarning.Text = "Ошибка Oracle: " + oracleEx.Message; } улов (FormatException formatEx) { LabelWarning.Text = "Ошибка формата: " + formatEx.Message; } поймать (Исключение ex) { LabelWarning.Text = "Ошибка: " + ex.Message; } окончательно { ВставитьДанныеGLТип(); } } } Чтобы столкнуться с этой проблемой, я сначала удаляю существующие данные из базы данных, а затем выполняю процесс вставки. Я просто не понимаю, почему я не могу просто обновить, хотя я уже поместил измененные строки в список. Я также пробовал OracleBuckCopy, но проблема все равно возникает.
Здесь я делаю процесс вставки и обновления данных внутри GridView в базе данных. Я столкнулся с небольшой проблемой, когда дело доходит до обновления. Когда я вставляю данные в несколько строк GridView, они обновляют только последнюю строку GridView. Если TDR_CODE уже существует в базе данных и, скажем, внутри таблицы есть 3 строки, то все 3 строки будут иметь то же значение, что и последняя строка GridView. Ниже приведены соответствующие коды, и они должны проверять наличие TDR_CODE внутри таблицы. Если его не существует, то счетчик будет равен 0, а если есть, то счетчик будет >0.
Ниже приведены коды
protected void GLType() { строка QueryCheckExistingTDRCode = "SELECT COUNT(*) FROM table WHERE TDR_CODE = :TDR_CODE"; используя (OracleCommand CheckExistingTDRCodeCmd = новый OracleCommand (QueryCheckExistingTDRCode, con)) { CheckExistingTDRCodeCmd.Parameters.Add("TDR_CODE", OracleDbType.Varchar2).Value = TextBoxTDRCode.Text; int count = Convert.ToInt32(CheckExistingTDRCodeCmd.ExecuteScalar()); если (счет == 0) { ВставитьДанныеGLТип(); } еще { ОбновлениеДанныхGLТип(); } } } защищенная пустота InsertDataGLType() { строка InsertQuery = "Таблица INSERT INTO (TDR_CODE, GL_TYPE, GL_ACCNO) VALUES (:TDR_CODE, :GL_TYPE, :GL_ACCNO)"; пытаться { List updateItems = новый List(); foreach (строка GridViewRow в GridViewSelection.Rows) { DropDownList ddlGLType = (DropDownList)row.FindControl("DropDownListGLType"); TextBox txtGLaccNo = (TextBox)row.FindControl("TextBoxGLAccNo"); if (!string.IsNullOrEmpty(ddlGLType.SelectedValue) && !string.IsNullOrEmpty(txtGLAccNo.Text)) { // Добавляем данные в список updateItems.Add(новый UpdateDataItem { TDRCode = TextBoxTDRCode.Text, GLType = ddlGLType.SelectedValue, GLAccNo = txtGLAccNo.Text }); } } // Теперь обновляем базу данных данными из списка используя (OracleCommand InsertNewDataCmd = новый OracleCommand (insertQuery, con)) { InsertNewDataCmd.Parameters.Add("TDR_CODE", OracleDbType.Varchar2); InsertNewDataCmd.Parameters.Add("GL_TYPE", OracleDbType.Varchar2); InsertNewDataCmd.Parameters.Add("GL_ACCNO", OracleDbType.Varchar2); foreach (элемент var в updateItems) { InsertNewDataCmd.Parameters["TDR_CODE"].Значение = item.TDRCode; InsertNewDataCmd.Parameters["GL_TYPE"].Значение = item.GLType; InsertNewDataCmd.Parameters["GL_ACCNO"].Value = item.GLaccNo; InsertNewDataCmd.ExecuteNonQuery(); } } } поймать (OracleException oracleEx) { LabelWarning.Text = "Ошибка Oracle: " + oracleEx.Message; } улов (FormatException formatEx) { LabelWarning.Text = "Ошибка формата: " + formatEx.Message; } поймать (Исключение ex) { LabelWarning.Text = "Ошибка: " + ex.Message; } окончательно { если (string.IsNullOrEmpty(LabelWarning.Text)) { LabelWarning.Text = "Операция прошла успешно!"; } } } Ниже приведены проблемные коды обновления
protected void UpdateDataGLType() { string updateQuery = «ОБНОВЛЕНИЕ таблицы SET GL_TYPE = :GL_TYPE, GL_ACCNO = :GL_ACCNO WHERE TDR_CODE = :TDR_CODE»; пытаться { List updateItems = новый List(); foreach (строка GridViewRow в GridViewSelection.Rows) { DropDownList ddlGLType = (DropDownList)row.FindControl("DropDownListGLType"); TextBox txtGLaccNo = (TextBox)row.FindControl("TextBoxGLAccNo"); if (!string.IsNullOrEmpty(ddlGLType.SelectedValue) && !string.IsNullOrEmpty(txtGLAccNo.Text)) { // Добавляем данные в список updateItems.Add(новый UpdateDataItem { TDRCode = TextBoxTDRCode.Text, GLType = ddlGLType.SelectedValue, GLAccNo = txtGLAccNo.Text }); // При необходимости здесь можно выполнить дополнительные действия } } // Теперь обновляем базу данных данными из списка используя (OracleCommand UpdateCmd = новый OracleCommand (updateQuery, con)) { UpdateCmd.Parameters.Add("TDR_CODE", OracleDbType.Varchar2); UpdateCmd.Parameters.Add("GL_TYPE", OracleDbType.Varchar2); UpdateCmd.Parameters.Add("GL_ACCNO", OracleDbType.Varchar2); foreach (элемент var в updateItems) { UpdateCmd.Parameters["TDR_CODE"].Значение = item.TDRCode; UpdateCmd.Parameters["GL_TYPE"].Value = item.GLType; UpdateCmd.Parameters["GL_ACCNO"].Value = item.GLAccNo; UpdateCmd.ExecuteNonQuery(); } } } поймать (OracleException oracleEx) { LabelWarning.Text = "Ошибка Oracle: " + oracleEx.Message; } улов (FormatException formatEx) { LabelWarning.Text = "Ошибка формата: " + formatEx.Message; } поймать (Исключение ex) { LabelWarning.Text = "Ошибка: " + ex.Message; } окончательно { если (string.IsNullOrEmpty(LabelWarning.Text)) { LabelWarning.Text = "Операция прошла успешно!"; } } } Ниже приведены коды обновления, которые не вызывают проблем.
protected void UpdateDataGLType() { строка deleteQuery = "УДАЛЕНИЕ ИЗ таблицы WHERE TDR_CODE = :TDR_CODE"; используя (OracleCommand deleteCmd = новый OracleCommand(deleteQuery, con)) { deleteCmd.Parameters.Add("TDR_CODE", OracleDbType.Varchar2).Value = TextBoxTDRCode.Text; пытаться { deleteCmd.ExecuteNonQuery(); } поймать (OracleException oracleEx) { LabelWarning.Text = "Ошибка Oracle: " + oracleEx.Message; } улов (FormatException formatEx) { LabelWarning.Text = "Ошибка формата: " + formatEx.Message; } поймать (Исключение ex) { LabelWarning.Text = "Ошибка: " + ex.Message; } окончательно { ВставитьДанныеGLТип(); } } } Чтобы столкнуться с этой проблемой, я сначала удаляю существующие данные из базы данных, а затем выполняю процесс вставки. Я просто не понимаю, почему я не могу просто обновить, хотя я уже поместил измененные строки в список. Я также пробовал OracleBuckCopy, но проблема все равно возникает.
Мобильная версия