gpt4 book ai didi

c# - OracleCommand 命令,ExecuteNonQuery 问题

转载 作者:太空狗 更新时间:2023-10-29 23:59:18 27 4
gpt4 key购买 nike

我必须清除 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();
}
}

我用这个列表调用这个方法

ClearDataTables(new List<string> { "GROUP_DEFINITION", "GROUP_REPORT_EMAIL_LIST", "GROUP_EQUIPMENT_GROUP_STN_XREF"});

前两个表运行良好,但是在第三个表上,它卡住了,应用程序永远运行...

有趣的是,当我切换“GROUP_REPORT_EMAIL_LIST”和“GROUP_EQUIPMENT_GROUP_STN_XREF”时应用程序在遇到第二个表名后将永远运行。

因此,总而言之,该函数在命中“GROUP_EQUIPMENT_GROUP_STN_XREF”时将永远运行。我已通过在蟾蜍上进行测试来验证生成的 SQL 是否有效。

还有其他人遇到过这个问题吗?

编辑 - 前两个表在运行时确实会被清除。

解决方案

string connectionString = "CONNECTIONSTRING";
using (OracleConnection connection = new OracleConnection(connectionString))
{
connection.Open();
OracleCommand command = connection.CreateCommand();
OracleTransaction trans = connection.BeginTransaction();
command.Transaction = trans;
foreach (string table in tableNames)
{
string sql = String.Format("DELETE FROM TOA_REPORTING.{0}", table);
command.CommandText = sql;
command.ExecuteNonQuery();
}
trans.Commit();
}

TRUNCATE 本来是一个非常好的解决方案,但我没有这样做的权限!

最佳答案

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

关于c# - OracleCommand 命令,ExecuteNonQuery 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5380688/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com