0

我需要编写一个控制台应用程序,它返回一个可以通过 xp_cmdshell 捕获的返回码。

我从 c# 代码开始如下,

class Program
    {
        static int Main(string[] args)
        {
            //make sure the correct number of arguments are being passed.
            if (args.Length !=5)
            {
                Console.WriteLine("not thr right number of args. \nUsage SFTPUploadFile <host> <port> <username> <password> <localFilePath>");
                return 1;
            }

            return 0;        
        }

    }

XP_cmdhsell 我正在使用我找到的一些代码

declare  @rc int

create table #output (id int identity(1,1), output nvarchar(255) null)
insert #output (output) exec @rc = master..xp_cmdshell 'd:\FILENAME PARA1 PARA2 PARA3 PARA4 PARA5'
select * from #output where output is not null order by id
drop table #output

但是当我运行我的 xp_cmdshell 时,我只是得到空值。我不应该得到1或0吗?

谢谢

4

1 回答 1

0

看起来你的程序检查是否有 5 个参数,0如果有,什么也不做(返回)。

xp_cmdshell 命令反过来提供所有参数。如果xp_cmdshellNULL没有收到任何输出,它将返回。

如果您将代码更改为如下所示:

class Program
    {
        static int Main(string[] args)
        {
            //make sure the correct number of arguments are being passed.
            if (args.Length !=5)
            {
                Console.WriteLine("not thr right number of args. \nUsage SFTPUploadFile <host> <port> <username> <password> <localFilePath>");
                return 1;
            }

            Console.WriteLine("You had the right number of args.");
            return 0;        
        }

    }

(或者,如果你真的想要 0 或 1,你可以这样做Console.WriteLine("0");Console.WriteLine("1");

你会回来You had the right number of args.的。这是因为return 0;并且return 1;不会将任何内容打印到控制台,这xp_cmdshell将发送回客户端。

您可以通过这样做来证明这一点EXEC master..xp_cmdshell 'cd ..'……这是一个不返回结果的命令。另一方面,EXEC master..xp_cmdshell 'dir *.exe'将返回目录内容,因为这是输出(或写入)到控制台的内容。

于 2013-06-20T02:41:21.210 回答