所以我在这里做的是将网格视图中的数据插入和更新到数据库的过程。当涉及到更新时,我面临着一点问题。当我将数据插入网格视图的多行时,它只会更新网格视图的最后一行。如果TDR_CODE已经存在于数据库中,假设它在表中有3行,然后所有的3行将有相同的值作为gridview的最后一行.下面是相关的代码,它做的是代码必须检查表中的TDR_CODE的存在.如果它不存在,那么计数将是0,但如果它是,计数将>0.
下面是代码
protected void GLType()
{
string QueryCheckExistingTDRCode = "SELECT COUNT(*) FROM table WHERE TDR_CODE = :TDR_CODE";
using (OracleCommand CheckExistingTDRCodeCmd = new OracleCommand(QueryCheckExistingTDRCode, con))
{
CheckExistingTDRCodeCmd.Parameters.Add("TDR_CODE", OracleDbType.Varchar2).Value = TextBoxTDRCode.Text;
int count = Convert.ToInt32(CheckExistingTDRCodeCmd.ExecuteScalar());
if (count == 0)
{
InsertDataGLType();
}
else
{
UpdateDataGLType();
}
}
}
protected void InsertDataGLType()
{
string insertQuery = "INSERT INTO table (TDR_CODE, GL_TYPE, GL_ACCNO) VALUES (:TDR_CODE, :GL_TYPE, :GL_ACCNO)";
try
{
List<UpdateDataItem> updateItems = new List<UpdateDataItem>();
foreach (GridViewRow row in GridViewSelection.Rows)
{
DropDownList ddlGLType = (DropDownList)row.FindControl("DropDownListGLType");
TextBox txtGLAccNo = (TextBox)row.FindControl("TextBoxGLAccNo");
if (!string.IsNullOrEmpty(ddlGLType.SelectedValue) && !string.IsNullOrEmpty(txtGLAccNo.Text))
{
// Add data to the list
updateItems.Add(new UpdateDataItem
{
TDRCode = TextBoxTDRCode.Text,
GLType = ddlGLType.SelectedValue,
GLAccNo = txtGLAccNo.Text
});
}
}
// Now, update the database with the data from the list
using (OracleCommand InsertNewDataCmd = new 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 item in updateItems)
{
InsertNewDataCmd.Parameters["TDR_CODE"].Value = item.TDRCode;
InsertNewDataCmd.Parameters["GL_TYPE"].Value = item.GLType;
InsertNewDataCmd.Parameters["GL_ACCNO"].Value = item.GLAccNo;
InsertNewDataCmd.ExecuteNonQuery();
}
}
}
catch (OracleException oracleEx)
{
LabelWarning.Text = "Oracle Error: " + oracleEx.Message;
}
catch (FormatException formatEx)
{
LabelWarning.Text = "Format Error: " + formatEx.Message;
}
catch (Exception ex)
{
LabelWarning.Text = "Error: " + ex.Message;
}
finally
{
if (string.IsNullOrEmpty(LabelWarning.Text))
{
LabelWarning.Text = "Operation successful!";
}
}
}
字符串
下面是有问题的更新代码
protected void UpdateDataGLType()
{
string updateQuery = "UPDATE table SET GL_TYPE = :GL_TYPE, GL_ACCNO = :GL_ACCNO WHERE TDR_CODE = :TDR_CODE";
try
{
List<UpdateDataItem> updateItems = new List<UpdateDataItem>();
foreach (GridViewRow row in GridViewSelection.Rows)
{
DropDownList ddlGLType = (DropDownList)row.FindControl("DropDownListGLType");
TextBox txtGLAccNo = (TextBox)row.FindControl("TextBoxGLAccNo");
if (!string.IsNullOrEmpty(ddlGLType.SelectedValue) && !string.IsNullOrEmpty(txtGLAccNo.Text))
{
// Add data to the list
updateItems.Add(new UpdateDataItem
{
TDRCode = TextBoxTDRCode.Text,
GLType = ddlGLType.SelectedValue,
GLAccNo = txtGLAccNo.Text
});
// You can perform additional actions here if needed
}
}
// Now, update the database with the data from the list
using (OracleCommand UpdateCmd = new 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 item in updateItems)
{
UpdateCmd.Parameters["TDR_CODE"].Value = item.TDRCode;
UpdateCmd.Parameters["GL_TYPE"].Value = item.GLType;
UpdateCmd.Parameters["GL_ACCNO"].Value = item.GLAccNo;
UpdateCmd.ExecuteNonQuery();
}
}
}
catch (OracleException oracleEx)
{
LabelWarning.Text = "Oracle Error: " + oracleEx.Message;
}
catch (FormatException formatEx)
{
LabelWarning.Text = "Format Error: " + formatEx.Message;
}
catch (Exception ex)
{
LabelWarning.Text = "Error: " + ex.Message;
}
finally
{
if (string.IsNullOrEmpty(LabelWarning.Text))
{
LabelWarning.Text = "Operation successful!";
}
}
}
型
下面是没有问题的更新代码
protected void UpdateDataGLType()
{
string deleteQuery = "DELETE FROM table WHERE TDR_CODE = :TDR_CODE";
using (OracleCommand deleteCmd = new OracleCommand(deleteQuery, con))
{
deleteCmd.Parameters.Add("TDR_CODE", OracleDbType.Varchar2).Value = TextBoxTDRCode.Text;
try
{
deleteCmd.ExecuteNonQuery();
}
catch (OracleException oracleEx)
{
LabelWarning.Text = "Oracle Error: " + oracleEx.Message;
}
catch (FormatException formatEx)
{
LabelWarning.Text = "Format Error: " + formatEx.Message;
}
catch (Exception ex)
{
LabelWarning.Text = "Error: " + ex.Message;
}
finally
{
InsertDataGLType();
}
}
}
型
所以遇到这个问题,我从数据库中删除现有的数据,然后执行插入过程。我只是不明白为什么我不能只是做更新,即使我已经把修改的行放在一个列表中。我也试过OracleBuckCopy,但问题仍然发生。
1条答案
按热度按时间23c0lvtd1#
我认为问题在于下面的foreach-loop
字符串
它有效地覆盖了分配给给定参数的值。结果:只有最后一个元素的值被保存到数据库中。像这样尝试:
型