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

前端 未结 8 1157
误落风尘
误落风尘 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:10

    Try the below.

    PS: Just because you use a transaction, doesn't mean you can neglect handling exceptions and rollbacks.

     public static void MessageEventHandler( object sender, SqlInfoMessageEventArgs e ) {
             foreach( SqlError error in e.Errors ) {
                Console.WriteLine("problem with sql: "+error);
                throw new Exception("problem with sql: "+error);
             }
          }
          public static int executeSQLUpdate(string database, string command) {
             SqlConnection connection = null;
             SqlCommand sqlcommand = null;
             int rows = -1;
             try {
                connection = getConnection(database);
                connection.InfoMessage += new SqlInfoMessageEventHandler( MessageEventHandler );
                sqlcommand = connection.CreateCommand();
                sqlcommand.CommandText = command;
                connection.Open();
                rows = sqlcommand.ExecuteNonQuery();
              } catch(Exception e) {
                Console.Write("executeSQLUpdate: problem with command:"+command+"e="+e);
                Console.Out.Flush();
                throw new Exception("executeSQLUpdate: problem with command:"+command,e);
             } finally {
                if(connection != null) { connection.Close(); }
             } 
             return rows;
          }
    

    And this is proper transaction handling:

    //public static void ExecuteInTransaction(Subtext.Scripting.SqlScriptRunner srScriptRunner)
            public override void ExecuteInTransaction(string strSQL)
            {
    
                System.Data.Odbc.OdbcTransaction trnTransaction = null;
    
                try
                {
    
    
                    System.Threading.Monitor.Enter(m_SqlConnection);
                    if (isDataBaseConnectionOpen() == false)
                        OpenSQLConnection();
    
                    trnTransaction = m_SqlConnection.BeginTransaction();
    
                    try
                    {
                        /*
                        foreach (Subtext.Scripting.Script scThisScript in srScriptRunner.ScriptCollection)
                        {
                            System.Data.Odbc.OdbcCommand cmd = new System.Data.Odbc.OdbcCommand(scThisScript.ScriptText, m_sqlConnection, trnTransaction);
                            cmd.ExecuteNonQuery();
                        }
                        */
    
                        // pfff, mono C# compiler problem...
                        // System.Data.Odbc.OdbcCommand cmd = new System.Data.Odbc.OdbcCommand(strSQL, m_SqlConnection, trnTransaction);
                        System.Data.Odbc.OdbcCommand cmd = this.m_SqlConnection.CreateCommand();
                        cmd.CommandText = strSQL;
    
                        cmd.ExecuteNonQuery();
    
                        trnTransaction.Commit();
                    } // End Try
                    catch (System.Data.Odbc.OdbcException exSQLerror)
                    {
                        Log(strSQL);
                        Log(exSQLerror.Message);
                        Log(exSQLerror.StackTrace);
                        trnTransaction.Rollback();
                    } // End Catch
                } // End Try
                catch (Exception ex)
                {
                    Log(strSQL);
                    Log(ex.Message);
                    Log(ex.StackTrace);
                } // End Catch
                finally
                {
                    strSQL = null;
                    if(m_SqlConnection.State != System.Data.ConnectionState.Closed)
                        m_SqlConnection.Close();
                    System.Threading.Monitor.Exit(m_SqlConnection);
                } // End Finally
    
    
            } // End Sub ExecuteInTransaction
    

提交回复
热议问题