2009-09-07 7 views
0

J'ai un problème concernant les lots SQL dans SQL Server.Problème de traitement par lots SQL Server avec la gestion des erreurs

On suppose que j'exécute un SqlCommand en utilisant le code suivant:

private void Example(SqlConnection connection, SqlTransaction transaction) 
    { 
    using (SqlCommand cmd = new SqlCommand("select * from T1; EXECUTE('update T2 set 1=2')", connection, transaction)) 
    { 
     SqlDataReader reader = cmd.ExecuteReader(); 
     .. 
     .. 
    } 
    } 

Maintenant, depuis la première déclaration dans le lot succeded, je reçois NO EXCEPTION et un résultat eventhough la execute ('' ') - déclaration clairement est dans l'erreur.

Si j'inverse les instructions, j'obtiens une exception car un jeu de résultats n'est pas généré avant la première erreur.

Maintenant, supposons que je voudrais détecter l'erreur dans les deux cas, comment dois-je faire sans génération de code « redondant » comme dans:

private void Example(SqlConnection connection, SqlTransaction transaction) 
    { 
    using (SqlCommand cmd = new SqlCommand("select INTO #T1 from T1; EXECUTE('update T2 set 1=2'); select * from #T1", connection, transaction)) 
    { 
     SqlDataReader reader = cmd.ExecuteReader(); 
     .. 
     .. 
    } 
    } 

Pas cette question peut sembler étrange, mais encore .. Je voudrais savoir la réponse, s'il vous plaît ne demandez pas pourquoi :)

Répondre

1

Vous devez lire le SqlDataReader jusqu'à ce qu'il ne renvoie plus de résultats (lire() boucle puis NextResult() et répétez). L'exception est plus bas sur le flux TDS et le SqlClient n'a pas encore pu l'analyser.

Questions connexes