0

一直在使用:

            private string RunScript(string storeNumber)
    {
        //string importSQL = "Import-Module sqlserver -DisableNameChecking";
        //string executionPolicy = "Set-ExecutionPolicy -ExecutionPolicy Unrestricted";
        //string script = "ping databaseName";
        //string script = "sqlcmd - h - 1 - Q \"set nocount on;SELECT System_Date FROM Location_Codes\" - d pos - S databaseName | out-string";
        string script = "invoke-sqlcmd -Query \"use pos set nocount on; SELCECT System_date FROM location_codes\" -serverinstance databaseName| out-string";
        Runspace runspace = RunspaceFactory.CreateRunspace();
        runspace.Open();

        Pipeline pipeline = runspace.CreatePipeline();
        //pipeline.Commands.AddScript(importSQL);
        //pipeline.Commands.AddScript(executionPolicy);
        pipeline.Commands.AddScript(script);


        Collection<PSObject> results = pipeline.Invoke();

        runspace.Close();

        StringBuilder stringBuilder = new StringBuilder();
        foreach(PSObject obj in results)
        {
            stringBuilder.AppendLine(obj.ToString());
        }
        MessageBox.Show(stringBuilder.ToString());
        return stringBuilder.ToString();

    }

尝试 sqlcmd 时,我没有收到任何错误,但没有返回任何内容(即使直接在 powershell 中输入命令也可以获得我想要的数据)

尝试 invoke-sqlcmd 时,我得到一个 CmdletInvocationException 抛出。对于我添加的那个错误

      <startup useLegacyV2RunttimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>

添加了 ping 命令作为测试。那确实返回数据。任何帮助,将不胜感激!

4

1 回答 1

0

This may be helpful to you change from
string script = "invoke-sqlcmd -Query \"use pos set nocount on; SELCECT System_date FROM location_codes\" -serverinstance databaseName| out-string";

To

string script = @"invoke-sqlcmd -Query 'use pos set nocount on Go SELCECT System_date FROM location_codes' -serverinstance databaseName| out-string";

The reason I use a single colon is, For Powershell '' is used to represent string And I don't think Powershell recognize ';' for sql delimiter.

于 2019-05-23T16:52:29.893 回答