2017-05-27 31 views
-1

我正在做一個任務,我希望我的程序能夠讀取和更新數據庫。數據庫本身在oracle上運行,並由我的大學提供(我有我自己的模式,我相信嗎?)使用C#通過Internet連接到SQL數據庫

現在我可以通過SSH連接使用諸如teraterm或putty的程序,一旦我登錄它就需要我交互式菜單,它允許我選擇幾個不同的選項。其中之一是殼。有一次,我選擇,我能使用bash命令登錄到SQL部分,並使用這些:

bash$ export ORACLE_HOME=/opt/oracle/product/client/11.2.0 
bash$ export TWO_TASK=SSID 
bash$ $ORACLE_HOME/bin/sqlplus 

連接到SQL數據庫。簡單。

但是,我希望能夠通過我的程序來做到這一點,這對我來說很困難。我正在使用SSH.NET,並且可以通過SSH連接看起來很好。問題是我無法訪問SQL部分。當我運行這些命令時,前兩個我認爲正確,但最後一個不會。它似乎無法看到$ ORACLE_HOME之後的任何內容。當我「回聲$ ORACLE_HOME/*」它甚至告訴我,/ bin目錄的文件夾:

/bin /boot /dev /etc /export /hey.php /home /lib /lib64 /local /lost+found /media /misc 
/mnt /opt /proc /root /sbin /selinux /srv /stage /sys /tmp /usr /var 

但是相反,當我運行的代碼的最後一行我得到的錯誤信息:

Error = "bash: /bin/sqlplus: No such file or directory\n" 

我不確定是否有一種更簡單的方式來訪問SQL的東西......但我使用SSH.NET非常接近,但我不明白爲什麼我無法像在膩子中那樣打開SQL部分或teraterm ...

任何幫助將不勝感激,謝謝你的時間。

我實際的C#代碼是這樣的:

//Connection information 
string user = "SSHusername"; 
string pass = "password"; 
string host = "address"; 

//Set up the SSH connection 
using (var client = new SshClient(host, user, pass)) 
{ 

    //Start the connection 
    client.Connect(); 
    var output = client.RunCommand("export ORACLE_HOME=/opt/oracle/product/client/11.2.0"); 
    Console.WriteLine(output.Result); 
    output = client.RunCommand("export TWO_TASK=SSID"); 
    Console.WriteLine(output.Result); 
    output = client.RunCommand("$ORACLE_HOME/bin/sqlplus"); 
    Console.WriteLine(output.Result); 
    output = client.RunCommand("username"); 
    Console.WriteLine(output.Result); 
    output = client.RunCommand("password"); 
    Console.WriteLine(output.Result); 
    output = client.RunCommand("SELECT * FROM users;"); 
    Console.WriteLine(output.Result); 

    client.Disconnect(); 
    Console.WriteLine(output.Result); 
} 
+0

發現看起來你的第三個'RunCommand'調用沒有選擇前兩個調用設置的環境變量。你是否檢查每個'RunCommand'調用是否打開一個新的shell,從而重置環境變量? –

回答

0

1.I建議您使用本機C#包連接oracle。你會得到錯誤的輸出格式。

  1. 我看到你的變量不起作用。因爲SQLPLUS客戶端應該在 $ ORACLE_HOME/bin/sqlplus下。但是你的代碼顯示/ bin/sqlplus。意味着$ ORACE_HOME不起作用。

  2. 您可以直接更改代碼並運行直接在sqlplus像/opt/oracle/product/client/11.2.0/bin/sqlplus用戶名/密碼@ SSID

  3. 您可以設置一些腳本遠程Oracle服務器上並獲得結果,或者每次從C#主機上傳腳本到遠程。

0

如果您使用的SSH.NET庫,使用殼牌,而不是單獨的命令應該工作 - 像(未經測試):

using (var client = new SshClient(host, user, pass)) { 
      client.Connect(); 
      client.CreateCommand("export ORACLE_HOME=/opt/oracle/product/client/11.2.0").Execute(); 
      client.CreateCommand("export TWO_TASK=SSID").Execute(); 
      client.CreateCommand("$ORACLE_HOME/bin/sqlplus").Execute()); 
      ... 
      client.Disconnect(); 
    } 

原始源代碼在SSH.NET example