从C#调用powershell以运行SQL Script

时间:2016-12-15 14:44:10

标签: powershell

我正在尝试运行从C#执行sql脚本的powershell脚本。

如果我从powershell命令提示符运行powershell脚本它可以工作但是当我尝试从C#运行它时它不起作用

以下是我用于运行powershell脚本的函数

public static void RunPowershell(string fileName, string functionName, Dictionary<string, string> parameters)
    {
        string fullPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), fileName);
        string script = File.ReadAllText(fullPath);

        try
        {
            using (Runspace runspace = RunspaceFactory.CreateRunspace())
            {
                runspace.Open();
                PowerShell instance = PowerShell.Create();
                instance.Runspace = runspace;

                instance.AddScript(script);

                instance.Invoke();

                instance.Commands.Clear();
                var command = instance.AddCommand(functionName);
                if (null != parameters)
                {
                    foreach (var parameter in parameters)
                    {
                        command.AddParameter(parameter.Key, parameter.Value);
                    }
                }
                var result = instance.Invoke();
            }
        }
        catch(Exception e)
        {
            MessageBox.Show(e.Message);
        }
    }

我的powershell脚本是(Test2.ps1):

    function RunScript(){
    Import-Module "SQLPS" -DisableNameChecking
    Invoke-Sqlcmd -inputfile ".\TestSQL.sql" -ServerInstance . -Verbose
}

function ShowMessage(){
    [System.Windows.Forms.MessageBox]::Show("Hi from Powershell !")
}

TestSQL.sql看起来像这样:

    USE TEST
GO
INSERT INTO Employee VALUES('1', 'abc')

我在尝试时显示消息框:

PowershellHelper.RunPowershell("Test2.ps1", "ShowMessage", null);

但是当我尝试时不会插入表格中:

PowershellHelper.RunPowershell("Test2.ps1", "RunScript", null);

1 个答案:

答案 0 :(得分:0)

这是因为你probalby在你当前的目录中没有TestSQL脚本。您必须提供完整路径或切换当前目录。

Invoke-Sqlcmd -inputfile "C:\FolderWhereYouhavetheSQL\TestSQL.sql" -ServerInstance . -Verbose

cd "C:\FolderWhereYouhavetheSQL"
Invoke-Sqlcmd -inputfile ".\TestSQL.sql" -ServerInstance . -Verbose