我有以下代码:
using (System.Data.OracleClient.OracleConnection dataConn = new System.Data.OracleClient.OracleConnection(_connectionString))
{
using (System.Data.OracleClient.OracleCommand cmd = new System.Data.OracleClient.OracleCommand())
{
cmd.Connection = dataConn;
cmd.CommandText = "DELETE FROM Employees WHERE LOCATIONID= :LOCATIONID";
cmd.Parameters.AddWithValue(":LOCATIONID", locationId);
dataConn.Open();
retVal += cmd.ExecuteNonQuery();
dataConn.Close();
}
using (System.Data.OracleClient.OracleCommand cmd = new System.Data.OracleClient.OracleCommand())
{
cmd.Connection = dataConn;
cmd.CommandText = string.Format("DELETE FROM Locations WHERE LocationId = :LOCATIONID";
cmd.Parameters.AddWithValue(":LOCATIONID", locationId);
dataConn.Open();
retVal += cmd.ExecuteNonQuery();
dataConn.Close();
}
}只是FYI
根据this链接:,我认为我做的事情是正确的,谁能指出为什么我仍然得到或-01000:最大开放游标超过错误?任何帮助都将不胜感激。谢谢。
发布于 2017-03-13 12:23:11
根据post中链接(ORA-01000: maximum open cursors exceeded in asp.net)中接受的答案,当您调用dataConn.Close()时,连接不是真正关闭的,而是在连接池中打开的。这是一种隐藏的优化,使打开其他连接更快,但当您超过Oracle的某些限制时,它可能会导致问题。我建议您研究限制连接池大小的方法--这取决于承载代码的是什么(IIS?还有别的吗?)。
您还可以将SQL更改为“从键位于IN的表中删除(值的...list.)”。这将消除打开50个逻辑连接的需要(谁知道有多少物理连接--潜在的大量连接)。
或者在dataConn.Open.dataConn.Close中执行循环--只对所有cmds使用相同的打开连接。
编辑:根据您使用的数据提供程序,连接池的大小可以从连接字符串中控制。有关示例,请参见https://msdn.microsoft.com/en-us/library/ms254502(v=vs.110).aspx。
https://stackoverflow.com/questions/42763256
复制相似问题