2017-05-27 73 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