Chi*_*ghE 4 c# sql oracle10g oraclecommand executenonquery
我必须清除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();
}
}
Run Code Online (Sandbox Code Playgroud)
我用这个列表调用这个方法
ClearDataTables(new List<string> { "GROUP_DEFINITION", "GROUP_REPORT_EMAIL_LIST", "GROUP_EQUIPMENT_GROUP_STN_XREF"});
Run Code Online (Sandbox Code Playgroud)
它可以很好地运行前两个表,但是在第三个表上,它会卡住,应用程序会永远运行...
有趣的是,当我切换"GROUP_REPORT_EMAIL_LIST"和"GROUP_EQUIPMENT_GROUP_STN_XREF"时,应用程序在命中第二个表名后永远运行.
总而言之,当函数命中"GROUP_EQUIPMENT_GROUP_STN_XREF"时,该函数将永远运行.我已经验证了生成的SQL是通过在toad上测试它来实现的.
其他人遇到过这个问题?
编辑 - 前两个表确实在运行时被清除.
解
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();
}
Run Code Online (Sandbox Code Playgroud)
TRUNCATE本来是一个非常好的解决方案,但我没有这样做的权限!