How can I get an error message that happens when using ExecuteNonQuery()?

前端 未结 8 1158
误落风尘
误落风尘 2020-12-06 04:59

I am executing a command in this way :

var Command = new SqlCommand(cmdText, Connection, tr);

Command.ExecuteNonQuery();

In the command th

8条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-12-06 05:21

    You catch the SqlException using try/catch

     try
      {
           //.......
        Command.ExecuteNonQuery();      
       }
        catch (SqlException ex)
         {   
           log (SqlExceptionMessage(ex).ToString());
         }
    

    The following Method Catch details of SqlException which can be logged or displayed to user

      public StringBuilder SqlExceptionMessage(SqlException ex)
        {
            StringBuilder sqlErrorMessages = new StringBuilder("Sql Exception:\n");
    
            foreach (SqlError error in ex.Errors)
            {
                sqlErrorMessages.AppendFormat("Mesage: {0}\n", error.Message)
                    .AppendFormat("Severity level: {0}\n", error.Class)
                    .AppendFormat("State: {0}\n", error.State)
                    .AppendFormat("Number: {0}\n", error.Number)
                    .AppendFormat("Procedure: {0}\n", error.Procedure)
                    .AppendFormat("Source: {0}\n", error.Source)
                    .AppendFormat("LineNumber: {0}\n", error.LineNumber)
                    .AppendFormat("Server: {0}\n", error.Server)
                    .AppendLine(new string('-',error.Message.Length+7));
    
            }
            return sqlErrorMessages;
        }
    

    The Generated message look like:

     Sql Exception:
     Mesage: Error converting data type nvarchar to datetime.
     Severity level: 16
     State: 5
     Number: 8114
     Procedure: Sales by Year
     Source: .Net SqlClient Data Provider
     LineNumber: 0
     Server: myserver
     -------------------------------------------------------
    

提交回复
热议问题