2017-12-03 71 views
1

我正在制作一个工具来重置/解锁oracle用户,我通过sqlplus使用以下语句解锁用户“ALTER USER myUserName ACCOUNT UNLOCK;”但是,每次我通过我的C#代码执行语句时,我都会看到这个错误!经过数小时的试验和错误,我正在寻求帮助!任何帮助将是伟大的!使用C#输入更改用户声明到Oracle中使用C#

另外,如果有人可以建议如何在提交声明后得到Oracle的回应?

谢谢大家提前!

  public ActionResult SubmitRequest() 
    { 
      String connectionString ="Data Source = (DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=myHost)(PORT=1234)) (CONNECT_DATA=(SID=mySID)));"+ 
      "User Id="+Username+";"+ 
      "password="+password+ ";"; 

      OracleConnection con = new OracleConnection(); 
      con.ConnectionString = connectionString; 
      if (con.State == ConnectionState.Closed) 
      { 
       con.Open(); 
       OracleCommand cmd = new OracleCommand(); 
       cmd.CommandText = "ALTER USER myUserName ACCOUNT UNLOCK;" 
       cmd.ExecuteNonQuery(); 
      } 

      con.Close(); 
      return View(); 
    } 

错误:

  Server Error in '/' Application. 
      Invalid operation. The connection is closed. 
      Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

      Exception Details: System.InvalidOperationException: Invalid operation. The connection is closed. 
      Source Error: 
      Line 134:     cmd.CommandText = CommandUnlock; 
      Line 135:     con.Open(); 
      Line 136:     cmd.ExecuteNonQuery(); 

,也是我得到同样的错误,当我使用 - “cmd.ExecuteScalar();”

回答

0

请点击此链接:

How to run 'alter user' command from C#

否则,您可以编写类似波纹管的步骤,并从C#执行它。

CREATE OR REPLACE PROCEDURE UNLOCK_USER(P_USER IN VARCHAR2) IS 
BEGIN 
    EXECUTE IMMEDIATE 'ALTER USER ' || P_USER || ' ACCOUNT UNLOCK'; 
END UNLOCK_USER; 
+0

感谢马赫迪在这里你的帮助! :) – leon03

+0

我使用该链接来构建我的代码,我真的怀疑它曾经工作过!经过一番研究,我的代码看起来如何发布它。但最初我从我从那个链接中抓到的东西开始。至于你以前的帖子,我需要解锁用户,而不是找到用户的状态。 原谅我在这里的知识不足,我有点努力学习nooob。 如何创建程序?在哪里输入: 创建或更换过程UNLOCK_USER(P_USER IN VARCHAR2)是 BEGIN EXECUTE IMMEDIATE'ALTER USER'|| P_USER || 'ACCOUNT UNLOCK'; END UNLOCK_USER;? – leon03

+0

你可以使用这些应用程序pl/sql developer,oracle sql developer,SQLPlus来创建你的程序。甚至可以使用C#IDE创建它。有了这些应用程序,您应该登录您的架构,然后打开新的SQL窗口,然后创建您的过程。注意:您的oracle用户必须拥有修改用户xx的权限。 –

0

您永远不会将该命令与连接相关联。成规还使用了using块,以确保命令和连接是否正确配置::

using(OracleConnection con = new OracleConnection(connectionString) 
using(OracleCommand cmd = new OracleCommand("ALTER USER myUserName ACCOUNT UNLOCK;", con) 
{ 
    con.Open(); 
    cmd.ExecuteNonQuery(); 
} 
+0

没有错误!谢谢!!当语句是通过直接从SQLPlus发送的时候,会有一个响应 – leon03

+0

有一个响应,指示用户是否被更改,或者如果找不到用户名,或者密码正在被重用等等。 w – leon03

+0

您是否知道是否有方法从C#获取响应? – leon03