【发布时间】:2017-05-16 03:42:02
【问题描述】:
需要在 c# 中进行编程的最佳方法。我正在尝试执行 if record exists update 语句 else insert 语句,更新代码但仍然有插入/更新到数据库的问题。从此代码执行后,数据库中没有任何显示:
String updCmdTxt = "UPDATE..";
String insertCmdTxt = "INSERT ..";
using (var scope = new TransactionScope())
{
using (var con = new OracleConnection(strConnection))
{
bool isDuplicate = false;
var insertcmd = new OracleCommand(insertCmdTxt, con);
try
{
con.Open();
......add params
insertcmd.ExecuteNonQuery();
con.Close();
Response.Redirect("test.aspx?Id=" + labelRID.Text);
}
catch (OracleException x)
{
isDuplicate = true; //determine if the exception is about duplicates.
if (!isDuplicate)
{
throw;
}
}
finally
{
insertcmd?.Dispose();
}
if (isDuplicate)
{
using (var updcmd = new OracleCommand(updCmdTxt, con))
{
....
updcmd.ExecuteNonQuery();
}
}
scope.Complete();
Response.Redirect("test.aspx?Id=" + labelRID.Text);
}
}
}
有没有更好的编程方法?如果有,怎么做?
【问题讨论】:
-
2 件事:1. 确保您的
rid字段具有唯一约束。 2. 在您的else块中(INSERT操作)捕获并处理duplicate row exception。如果在您的第一次检查SELECT COUNT和您的插入/更新操作之间有可能另一个客户端/连接/线程可能已经进行了插入,那么这些很重要。 -
也是一种优化:您可以重复使用与检查计数相同的连接来插入或更新。请注意,如果您要从最后插入的行中检索自动递增的 ID,则必须确保该连接没有在另一个线程上使用。
-
你可以用oracle合并语句做你想做的事
-
有没有例子说明如何在c#中做oracle合并语句
-
这个问题仍然存在。它不是插入或更新到数据库中。看看我上面更新的代码,让我知道我做错了什么。谢谢