2011-06-06 6 views
0

J'ai une procédure stockée CLR que je veux exécuter de manière asynchrone à partir de C#.fonction asynchrone ne pas exécuter la procédure stockée SQL CLR

le code est le suivant:

private delegate void GeneratePayrollDelegate(string payProcessID); 

public void GeneratePayroll(string payProcessID) 
    { 
     GeneratePayrollDelegate del = new GeneratePayrollDelegate(GeneratePayrollAsync); 
     del.BeginInvoke(payProcessID, null, null); 
    } 

public void GeneratePayrollAsync(string payProcessID) 
    { 
     try 
     { 
      using (SqlConnection connection = new SqlConnection(DLConnectionStringHelper.GetConnectionString() + "; async=true;")) 
      { 
       using (SqlCommand cmd = new SqlCommand("proc_GeneratePayroll", connection)) 
       {       
        cmd.CommandTimeout = 3600; 
        cmd.CommandType = CommandType.StoredProcedure; 

        connection.Open(); 
        cmd.ExecuteNonQuery(); 
        connection.Close(); 
       } 
      } 
     } 
     catch (Exception ex) { _Exceptions.ManageExceptions(ex); } 
    } 

Cette procédure stockée exécute avec succès si elle va de sql.

Quand il exécute à partir de ce code ci-dessus, il donne aucune ligne dans la procédure stockée CLR lorsque vous essayez de récupérer la ligne par l'ID envoyé comme paramètre.

Besoin d'aide!

+3

et l'erreur est? – Jodrell

+0

Dans le proc CLR, l'une des fonctions est de prendre des informations nécessaires relatives à cette payprocessID, elle retourne aucune ligne. lorsque je tente de récupérer la ligne à postion 0, il donne plage exception – Boomer

+0

Ainsi, il exécute toujours avec succès, mais vous obtenez des résultats inattendus? Il vaudrait mieux éditer la question. – Jodrell

Répondre

1

vous appelez cmd.ExecuteNonQuery(); vous devriez appeler BeginExecuteReader à la place pour obtenir le résultat comme exemple de code peut être comme ceci

private void Asynchronous(IAsyncResult asyncResult) 
{ 
       System.Data.SqlClient.SqlDataReader reader; 
       try 
       { 
        System.Data.SqlClient.SqlCommand command = 
         asyncResult.AsyncState as System.Data.SqlClient.SqlCommand; 
        reader = command.EndExecuteReader(asyncResult); 
        while (reader.Read()) 
        { 

        } 
        reader.Close(); 
       } 
       catch 
       { 
       } 
} 

public void GeneratePayrollAsync(string payProcessID) 
{ 
    try 
    { 
     using (SqlConnection connection = new SqlConnection("ConnectionString")) 
     { 
      using (SqlCommand command = new SqlCommand("proc_GeneratePayroll", connection)) 
      { 
       command.CommandTimeout = 3600; 
       command.CommandType = CommandType.StoredProcedure; 
       //Set Your stored procedure parameter here 
       connection.Open(); 
       command.BeginExecuteReader(Asynchronous, command, CommandBehavior.Default); 

      } 
     } 
    } 
    catch (Exception ex) { } 
} 
Questions connexes