none
关于VB.net调用其他程序时输入参数传递的问题 RRS feed

  • 问题

  • 使用VB.net调用SAS Stored Process,对于常量的输入参数,直接传递即可。但是非常数的输入参数的传递却存在问题,代码如下。例如采用textbox控件,那么在调用时,传递的是textbox.text这个字符串,而不是text的内容。请教各位高手,如何实现传递textbox的内容这个功能?谢谢!(引号是必须的)

    SAS:
    %let para1 = ;

    %let para2 = ;
    *ProcessBody;
    ……

    VB:
    ……
    obStoredProcessService.Execute ("sasprog", "para1=textbox1.text para2=textbox2.text")

    2012年6月3日 14:05

答案

全部回复

  • obStoredProcessService.Execute ("sasprog", string.format("para1={0} para2={1}",textbox1.text,textbox2.text))

    大概就这样写吧

    算神的博客

    • 已标记为答案 ElaineZ 2012年6月8日 12:44
    2012年6月4日 1:08
  • 果然可以了,太感谢了!不过我发现只要textbox中的内容里有空格就会出错,因为一碰到空格传递就停止了,请问这是怎么回事呢?有没有办法解决呢?
    2012年6月4日 11:56
  • 你可以通过.Trim或.Replace等方法把空格过滤掉就可以了


    算神的博客

    • 已标记为答案 ElaineZ 2012年6月8日 12:44
    2012年6月4日 23:36
  • 我用replace实现了,谢谢!
    2012年6月5日 14:04
  • 还有,因为SAS中字符串外面会有引号,而传递过来的textbox1.text 外面却没有引号,在SAS中可能无法识别为字符串,请问有什么办法可以加让传递过去的字符串有引号吗?
    2012年6月5日 14:07
  • 
    string.format("para1=""{0}"" para2=""{1}""",textbox1.text,textbox2.text)
    需要用到引号的地方可以这样写

    算神的博客

    • 已标记为答案 ElaineZ 2012年6月8日 12:45
    2012年6月5日 23:58
  • 没有用哎,传递过去的还是没有引号。

    2012年6月7日 13:10
  • 你可以用 msgbox 显示一下string.format后生成的参数字符串对否,如果生成的是有引号 是你想要的,则你需要考虑是不是你传递的接收方那边有问题

    算神的博客

    • 已标记为答案 ElaineZ 2012年6月8日 12:45
    2012年6月8日 7:58
  • 谢谢你了,我最后是在SAS code里面人工加的引号。
    2012年6月8日 12:44
  • 程序出现了一个新的问题想要请教一下,在传递的时候有多个变量,有时其中几个变量为空,如变量para2,但是textbox2中空值却没办法传递过去,程序会提示出错,“未处理的comException”,请问这个有办法解决吗?

    obStoredProcessService.Execute "sasprog", string.format("para1={0} para2={1}",textbox1.text,textbox2.text))

    2012年6月10日 12:38