我目前正在执行一项任务,我希望我的程序能够读取和更新数据库。数据库本身在oracle上运行,由我的大学提供(我相信我有自己的架构吗?)
现在我可以通过SSH使用teraterm或putty等程序进行连接,一旦我登录它就会带我进入交互式菜单,这样我就可以选择一些不同的选项。其中一个是shell。一旦我选择了我能够使用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连接看似很好。问题是我无法访问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但我不知道为什么我无法打开我可以在putty或teraterm中使用SQL部分......
非常感谢任何帮助,谢谢你的时间。
我的实际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 :(得分:0)
1.我建议您使用本机C#包连接Oracle。您将得到错误的输出格式。
我看到你的变量不起作用。因为SQLPLUS客户端应该在 $ ORACLE_HOME / bin中/ sqlplus的。但是你的代码显示/ bin / sqlplus。意味着$ ORACE_HOME不起作用。
您可以直接更改代码并直接运行sqlplus,例如/opt/oracle/product/client/11.2.0/bin/sqlplus user / pass @ SSID
您可以在远程oracle服务器上设置一些脚本并获取结果,或者每次从C#主机上传脚本到远程。
答案 1 :(得分:0)
如果您正在使用SSH.NET库,那么使用Shell而不是单独的命令应该可以工作 - 类似于(未经测试):
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();
}
找到原始源代码