Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# OracleCommand命令,ExecuteOnQuery问题_C#_Sql_Oracle10g_Executenonquery_Oraclecommand - Fatal编程技术网

C# OracleCommand命令,ExecuteOnQuery问题

C# OracleCommand命令,ExecuteOnQuery问题,c#,sql,oracle10g,executenonquery,oraclecommand,C#,Sql,Oracle10g,Executenonquery,Oraclecommand,但是,当我在运行以下代码时遇到问题时,我必须清除oracle数据库中的某些表 public static void ClearDataTables(IList<string> tableNames) { string connectionString = "CONNECTIONSTRING"; using (OracleConnection connection = new OracleConnection())

但是,当我在运行以下代码时遇到问题时,我必须清除oracle数据库中的某些表

public static void ClearDataTables(IList<string> tableNames)
        {
            string connectionString = "CONNECTIONSTRING";
            using (OracleConnection connection = new OracleConnection())
            {
                connection.ConnectionString = connectionString;
                connection.Open();
                foreach (string table in tableNames)
                {
                    OracleCommand command = connection.CreateCommand();
                    string sql = String.Format("DELETE FROM TOA_REPORTING.{0}", table);
                    command.CommandText = sql;
                    command.ExecuteNonQuery();
                }
                connection.Close();
            }
        }

TRUNCATE将是一个非常好的解决方案,但是我没有这样做的特权

那张表中有很多数据吗?这可以解释为什么删除数据需要这么长时间。

无论如何,我建议使用
TRUNC
来清除表格。

您是否忘记在Toad(或任何其他客户机)中提交更改?打开的事务将导致它无限期等待

大量删除可能非常慢,尤其是在一个事务中运行时。如果您根本不需要交易,请使用:

truncate table YourTable
如果是,请将
delete
拆分为小型事务。基本运行:

delete from YourTable where rownum < 100
从rownum<100的表中删除

直到桌子空了。请参见此示例。

我可能会编写一个存储过程来执行所有删除或截断,并调用SP一次,而不是使用循环客户端


编辑:最好不要在循环中创建命令对象。使用表名参数在循环外部创建一次,然后调用它,并在每次迭代中为其提供不同的参数值。但是SP是首选。

您不能确定OP是否确实需要撤消功能,而当使用
trunc
清除表时,该功能不可用。@Mike:在
提交后如何撤消
删除
?可以通过撤消功能查看恢复场景@迈克:谢谢你的链接。不幸的是,我想我无法理解这与撤消已提交的删除有什么关系。在生产环境中,很可能要在某一点上手动恢复被删除的数据(文档中的flasback)。截断表可以消除这种可能性。您没有提供任何建议截断而不是删除的原因。是否有完整源代码示例的最终解决方案可以解决此问题?
truncate table YourTable
delete from YourTable where rownum < 100