0
    OracleConnection conn = new OracleConnection();
    conn.ConnectionString = @"Data Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.206.0.23)(PORT = 1521)))(CONNECT_DATA = (SID = ORCLWEX3)));User Id= RAMNIVAS_CI;Password= RAMNIVAS_CI;";
    conn.Open();


    SetStatus(null, "CLEARING CI DATABASE");
    OracleCommand com = new OracleCommand(@"set pages 0
                    set lines 80
                    spool c:\delete_objects_CI
                    select 'drop '||object_type||' '||object_name||';'
                    from user_objects;
                    spool off
                    start c:\delete_objects_CI.lst
                    purge recyclebin;
                    set pages 100", conn);
    com.ExecuteNonQuery();

我想我正在尝试执行的查询存在一些问题。

4

2 回答 2

1

您不能使用 Oracle 客户端执行 SQL*plus 命令。只有 SQL*plus 和一些 Oracle 工具(如 SQL Developer)支持 SQL*plus 命令。

您的代码基本上遍历当前用户的所有对象,然后删除它们。您应该能够通过循环实现相同的目的:

OracleCommand userObjCmd = new OracleCommand("select object_type, object_name from user_objects", conn);
OracleDataReader reader = command.ExecuteReader();
while (reader.Read())
{
    OracleCommand dropCmd = new OracleCommand(
        String.Format(@"execute immedidate 'drop {0} \"{1}\"'",
            reader.GetValue(0), reader.GetValue(1)),
        conn);
    dropCmd.ExecuteNonQuery();
}

您将需要添加一些代码以正确关闭命令和读取器实例以及处理错误。

您可能需要默默地丢弃错误并尝试多次重复上述代码,直到所有对象都已成功删除,因为只要其他对象依赖它,某些对象就无法删除。

于 2012-08-16T08:51:03.710 回答
0

您正试图通过您的驱动程序执行 SQL*Plus 命令。我不认为这是可以做到的。

于 2012-08-16T07:00:13.410 回答