2016-09-12 8 views
0

私は間違いなくC#を初めて使っていますが、別の場所で仕事が残っているので、愚かな質問をすると穏やかになります(これは簡単だと思います)。私はSSH.NETを使用していますが、現在のコードは間違っているわけではありませんが、前の人が書いた方法で、反対側に開いているssh接続を残すことができます。C#SSH Create.Command改行構文

現在の作業コードは通常通りSSHセッションを開きますが、リモートシステム上でコマンドを実行するには、このようなものを使用しています。

Stream.Writeline("part of the command") 
Stream.Readline(); 
Stream.Writeline("second part of command") 
Stream.Readline(); 
Stream.Writeline("last part of command") 
Stream.Readline(); 

それはしかし、私は繰り返し回数を見てきたはずですので、これは正確にデータを連携し、収集します後でSSH接続がリモートシステム上で開いたままになります。私の問題は、それはだ、私は、リモート・システム上で実行したいコマンドを実行するためにリターンを必要とすることである

command1 = client.CreateCommand("full command to run") 
result = command1.Execute() 

:私は何をしたいのようcreate.commandを経由して、すべて単一のコマンドの中にこれを送っていますデータベースコマンド:

command1 = client.CreateCommand("mysql -u user <<EOF\nselect COUNT(*) from table1\ngo\nEOF\n") 

/1がCreate.Commandにリターンを挿入するにはどうすればよい:私がやりたいのは何

mysql -u user <<EOF 
select COUNT(*) from table1 
go 
EOF 

?私はそう仮定しています。理由はありませんが、Create.Commandを介して上記の各行の後に返す必要があるデータベースコマンドを送信するための正しい構文を見つけるのは苦労しています。私は改行のために\ nを使ってみましたが、99%は間違って使っています。

DBの例としてmysqlを使用しましたが、実際にはsybaseデータベースですが、その構文を使用して接続します。

+0

の\ N 'や他のエスケープ、または ''学びます@「」 'リテラル(逐語的な文字列) – SLaks

+0

また、SQLコマンドでBashのheredoc構文を使用しないでください。それは動作しません。 – SLaks

+0

おかげで、\ nが機能していたことがわかりました。期待した出力が得られませんでした。 Stream.Writelineを使うのではなく、Create.Commandを使って作業しているものを解析した後、はるかに高速に動作します。 – Ryan

答えて

0

なぜ最初の休憩が必要ですか?それらは、人間のためのクエリを素早くフォーマットするためのものです。 MySQLは人間ではありません。それほど気にすることはできませんでした。なぜこれをしないのですか?

mysql -u user -e 'select count(*) from table1' 

goコマンドのピリオドは必要ありません。

あなたが複数のコマンドを送信したいならば、あなたはまだ、任意の改行を必要としないだけで;

mysql -u user -e 'command1; command2; command3; ....' 
+0

残念ながら、mysql(sybase)以外の独自のデータベースでなければ、PSQLを使用して接続する別のサーバーがあり、その構文を使用するため、私はそうするでしょう。実際には私のログをチェックしたところ、問題を引き起こしている他のものだけが意図したとおりに動作していると思っていますが、システム上で適切にコマンドを実行しているようです。 – Ryan

+0

それがsybaseなら、なぜあなたはそこにmysqlを持っていますか?おそらくsybaseを質問タグに入れてください。 –

+0

申し訳ありませんが、それは似ているので、それは一回限りのDBのより多くの人々であり、人々はmysqlに精通しています。問題は私のコマンドの出力であると思っていますが、コマンドはDBログに表示されているので、コマンドはシステム上で動作するように動作していますが、問題を引き起こす残りのコード。正直なところ、私はこのプロジェクトのソロであるので、人々のためにいくつかのアイデアをpingする必要がありました。 – Ryan