0

我正在使用以下代码执行 osql 命令,然后获取其输出(如受影响的 2 行等),但它永远不会完成。请让我知道我错过了什么。

string sqlFilePath = Helper.GetFilePath(sqlFileName, Environment.CurrentDirectory);

Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = @"osql -E -S @Server -d @Database -T -n -i ""@SqlFile"""
           .Replace("@Server", ConfigurationManager.AppSettings["Server"])
           .Replace("@Database", Path.GetFileNameWithoutExtension(DB))
           .Replace("@SqlFile", sqlFilePath);
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.Start();

string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
4

1 回答 1

1

我相信您可能会遇到两个不同的问题:

  • 像这样设置FileNameArguments属性:

    p.StartInfo.FileName = "osql.exe";
    p.StartInfo.Arguments = @"-E -S @Server -d @Database -T -n -i ""@SqlFile"""
        .Replace("@Server", ConfigurationManager.AppSettings["Server"])
        .Replace("@Database", Path.GetFileNameWithoutExtension(DB))
        .Replace("@SqlFile", sqlFilePath);
    
  • 您可能还会遇到编码问题。确保使用Unicode 编码(代码页 1200)保存.sql文件(这里有一个描述问题的问题)。

于 2013-08-08T11:20:47.370 回答