使用C#通过Internet连接到SQL数据库

时间:2017-05-27 07:40:34

标签: c# sql bash oracle ssh

我目前正在执行一项任务,我希望我的程序能够读取和更新数据库。数据库本身在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数据库。容易。

但是,我希望能够通过我的程序做到这一点,这对我来说很难。我正在使用enter image description here并且可以通过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);
}

2 个答案:

答案 0 :(得分:0)

1.我建议您使用本机C#包连接Oracle。您将得到错误的输出格式。

  1. 我看到你的变量不起作用。因为SQLPLUS客户端应该在 $ ORACLE_HOME / bin中/ sqlplus的。但是你的代码显示/ bin / sqlplus。意味着$ ORACE_HOME不起作用。

  2. 您可以直接更改代码并直接运行sqlplus,例如/opt/oracle/product/client/11.2.0/bin/sqlplus user / pass @ SSID

  3. 您可以在远程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();
  }

SSH.NET example

找到原始源代码