我正在做一个任务,我希望我的程序能够读取和更新数据库。数据库本身在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,从而重置环境变量? –