Запуск sqlcmd или invoke-sqlcmd в сценарии powershell в С#

Использовал:

            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"/>

Added the ping command as a test. That does return back data. Any help would be appreciated!


person James    schedule 15.07.2018    source источник


Ответы (1)


Это может быть полезно при изменении
string script = "invoke-sqlcmd -Query \"use pos set nocount on; ВЫБЕРИТЕ System_date FROM location_codes\" -serverinstance databaseName| out-string";

To

string script = @"invoke-sqlcmd -Query 'use pos set nocount on Go ВЫБЕРИТЕ System_date FROM location_codes' -serverinstance databaseName| out-string";

Причина, по которой я использую одно двоеточие, заключается в том, что Powershell '' используется для представления строки. И я не думаю, что Powershell распознает ';' для разделителя sql.

person Niranjan Dharmarajan    schedule 23.05.2019