如何在C#中捕获SQLException?

bal*_*569 1 c# sql-server

在这里,我试图在SMO Ojects.In中使用innerexception捕获sql异常.在Sqlserver中我收到此错误消息

Msg 121, Level 15, State 1, Procedure test_sp_syntaxtext, Line 124
The select list for the INSERT statement contains more items than the insert list.
Run Code Online (Sandbox Code Playgroud)

但是通过使用此代码

catch (Exception ex)
          {
           ErrorFlag = true;
           //ex.Source.ToString();
           e2dInsertAndGenerateErrorLog(ex.InnerException.Message.ToString(), FileName, "CHECKINAPPLY", PathName, "ErrorLog.Err");
          }
Run Code Online (Sandbox Code Playgroud)

我得到了这个

The select list for the INSERT statement contains more items than the insert list.
Run Code Online (Sandbox Code Playgroud)

我也需要缓存这一行

Msg 121, Level 15, State 1, Procedure test_sp_syntaxtext, Line 124
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

编辑:

  StreamReader str = new StreamReader(FiletextBox.Text.ToString());
  string script = str.ReadToEnd();
  str.Dispose();
  SqlConnection conn = new SqlConnection("Data Source=xx;database=xxx;User id=sx;Password=xxxx");
  Server server = new Server(new ServerConnection(conn));
  server.ConnectionContext.ExecuteNonQuery(script);
Run Code Online (Sandbox Code Playgroud)

Akr*_*hda 8

使用SQLException.

    catch (SqlException ex)
    {
        for (int i = 0; i < ex.Errors.Count; i++)
        {
            errorMessages.Append("Index #" + i + "\n" +
                "Message: " + ex.Errors[i].Message + "\n" +
                "LineNumber: " + ex.Errors[i].LineNumber + "\n" +
                "Source: " + ex.Errors[i].Source + "\n" +
                "Procedure: " + ex.Errors[i].Procedure + "\n");
        }
        Console.WriteLine(errorMessages.ToString());
    }
Run Code Online (Sandbox Code Playgroud)