J'ai un DataSet avec un QueriesTableAdapter. Afin de contrôler le SqlCommand.CommandTimeout j'ai ajouté une classe partielle appelée QueriesTableAdapter avec une méthode publique appelée ChangeTimeout.Contrôle globalement de la commande TableAdapter
partial class QueriesTableAdapter
{
public void ChangeTimeout(int timeout)
{
foreach (System.Data.SqlClient.SqlCommand cmd in CommandCollection)
{
cmd.CommandTimeout = timeout;
}
}
}
Pour chaque DataSet je qui a un QueriesTableAdapter, je peux mettre la CommandTimeout avant l'exécution.
using (NameSpace.DataSet.DataSetTableAdapters.QueriesTableAdapter ta =
new NameSpace.DataSet.DataSetTableAdapters.QueriesTableAdapter())
{
ta.ChangeTimeout(3600);
ta.DoSomething();
}
Cela fonctionne bien dans la plupart des cas parce que le "QueriesTableAdapter" est nommé pour vous dans le concepteur DataSet. Le problème que je rencontre est le TableAdapters qui sont nommés de façon unique. Par exemple, si j'ai un DataTable appelé Person et un TableAdaper appelé PersonTableAdapter, je dois écrire une classe partielle PersonTableAdapter de la même manière que j'ai écrit la classe QueriesTableAdaper. J'ai des centaines de DataTables avec des noms TableAdapter uniques. Je ne veux pas créer une classe partielle pour chacun d'eux. Comment puis-je accéder aux objets SqlCommand sous-jacents d'une classe partielle de manière globale?
Excellent! J'ai eu le même problème. Votre solution fonctionne. –
Remplacé la dernière commande de ligne [0] .CommandTimeout = timeout; avec ce qui suit pour prendre en charge plusieurs méthodes dans TableAdapter: foreach (commande SqlCommand sc) { sc.CommandTimeout = timeout; } – riaandelange