我正在做一個任務,我希望我的程序能夠讀取和更新數據庫。數據庫本身在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);
}
發現看起來你的第三個'RunCommand'調用沒有選擇前兩個調用設置的環境變量。你是否檢查每個'RunCommand'調用是否打開一個新的shell,從而重置環境變量? –