2017-12-03 73 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