Question

Est-il possible d'implémenter le traitement par lots de plusieurs appels de procédures stockées (mises à jour / suppressions) dans ADO.NET sans recourir à DataAdapters?

Était-ce utile?

La solution

Vous pouvez essayer d’utiliser System.Data.SqlClient.SqlCommandSet. C'est en fait interne, mais Ayende a créé un wrapper pour le rendre public .

Le code est actuellement hébergé dans sourceforge .

Autres conseils

Votre texte SQL peut contenir plusieurs commandes. Si vous renvoyez plusieurs jeux de résultats, vous pouvez utiliser un DataReader et la fonction NextResult. Ce que je fais souvent est de stocker le code SQL à exécuter en tant que ressource incorporée, puis de charger ce texte. S'il contient des paramètres, définissez-les comme vous le feriez normalement.

Par exemple, j'ai un fichier:

UPDATE dbo.QuotePricedLineItem
SET fkQuoteVendorLineSet = NULL
FROM dbo.QuotePricedLineItem qpli
INNER JOIN dbo.QuoteLineItem qli ON qpli.Id = qli.Id
WHERE qli.fkQuote = @quoteId AND qpli.fkQuoteVendorLineSet = @ciscoConfigId

DELETE CiscoQuoteLineItem
FROM CiscoQuoteLineItem cqli
INNER JOIN QuoteLineItem qli ON cqli.Id = qli.Id
WHERE qli.fkQuote = @quoteId AND cqli.fkCiscoQuoteVendorLineSet = @ciscoConfigId

que j'exécute en tant que tel:

using (SqlConnection conn = DbUtils.CreateConnection() as SqlConnection)
{
    conn.Open();

    SqlCommand cmd = conn.CreateCommand();
    cmd.CommandText = MvcApplication.GetResource("SQL.DemoteCiscoQuoteLineItems.sql");
    cmd.Parameters.AddWithValue("@quoteId", q.Id);
    cmd.Parameters.AddWithValue("@ciscoConfigId", configSetId);
    cmd.ExecuteNonQuery();
}

Notez que MvcApplication.GetResource n’est pas une fonction intégrée - c’est une fonction que vous devez écrire ... voici la mienne:

public static string GetResource(string p)
{
    Stream s = Assembly.GetExecutingAssembly().GetManifestResourceStream("CortexQuoting.Res." + p);
    if (s == null) return null;

    StreamReader sw = new StreamReader(s);
    string ss = sw.ReadToEnd();
    sw.Close();
    return ss;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top