Возврат уровня ошибки во внешний файл при работе с sqlcmd - PullRequest
0 голосов
/ 30 марта 2019

Я хочу получить уровень ошибки для внешнего файла, когда выполнение команд SQL выполняется в cmd.exe, чтобы можно было продолжить дальнейшее кодирование.

Я использовал команду ECHO и уровень ошибки отображается в приглашении, но я хочу получить его во внешнем файле Мой код такой:

  Dim strCmdText As String
        strCmdText = "/C sqlcmd -S " & Server & " -d " & Databasename & " -i " & FileName & " -o " & ResultFile & " -V "
        System.Diagnostics.Process.Start("CMD.exe", strCmdText)

здесь вывод возвращается в Resultfile, также я хочу вернуть уровень ошибки.

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

Если при использовании команды echo вам будет предложено, почему бы не использовать

@echo message> c:\test.txt 

Также вы можете использовать

if errorlevel 1 goto function

:Function
@echo message> c:\test.txt

Я думаю, это то, что вы хотите? Вместо вывода возможно использовать команду echo для записи в файл?

0 голосов
/ 30 марта 2019

Используя vb.net, используйте try catch при запуске «command.ExecuteNonQuery ()» и сохраните ошибку в txt. Есть ли веская причина для использования cmd?

Вот так ..

Try
    command.ExecuteNonQuery()
Catch (Ex As Exception)
    Dim file As System.IO.StreamWriter 
    file = My.Computer.FileSystem.OpenTextFileWriter("c:\test.txt", True)
    file.WriteLine(ex.message) 
    file.Close()
End try

Посмотрите на это, также найденное в ветке, если вы все еще хотите использовать RedirectStandardOutput:

Imports System.Diagnostics
Imports System.IO

Private CurrentProcessID As Integer = -1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
StartProcess("C:\Windows\System32\tracert.exe", "stackoverflow.com")
End Sub

Private Sub StartProcess(FileName As String, Arguments As String)

Dim MyStartInfo As New ProcessStartInfo() With {
    .FileName = FileName,
    .Arguments = Arguments,
    .WorkingDirectory = Path.GetDirectoryName(FileName),
    .RedirectStandardError = True,
    .RedirectStandardOutput = True,
    .UseShellExecute = False,
    .CreateNoWindow = True
}

Dim MyProcess As Process = New Process() With {
    .StartInfo = MyStartInfo,
    .EnableRaisingEvents = True,
    .SynchronizingObject = Me
}

MyProcess.Start()
MyProcess.BeginErrorReadLine()
MyProcess.BeginOutputReadLine()

CurrentProcessID = MyProcess.Id

AddHandler MyProcess.OutputDataReceived,
    Sub(sender As Object, e As DataReceivedEventArgs)
        If e.Data IsNot Nothing Then
            BeginInvoke(New MethodInvoker(
            Sub()
                RichTextBox1.AppendText(e.Data + Environment.NewLine)
                RichTextBox1.ScrollToCaret()
            End Sub))
        End If
    End Sub

AddHandler MyProcess.ErrorDataReceived,
    Sub(sender As Object, e As DataReceivedEventArgs)
        If e.Data IsNot Nothing Then
            BeginInvoke(New MethodInvoker(
            Sub()
                RichTextBox1.AppendText(e.Data + Environment.NewLine)
                RichTextBox1.ScrollToCaret()
            End Sub))
        End If
    End Sub

AddHandler MyProcess.Exited,
    Sub(source As Object, ev As EventArgs)
        MyProcess.Close()
        If MyProcess IsNot Nothing Then
            MyProcess.Dispose()
        End If
    End Sub
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...