Domanda

È possibile implementare il batch di più chiamate di procedure memorizzate (facendo aggiornamenti / eliminazioni) in ADO.NET senza ricorrere a DataAdapters?

È stato utile?

Soluzione

Potresti provare a utilizzare System.Data.SqlClient.SqlCommandSet. In realtà è interno, ma Ayende ha creato un wrapper per renderlo pubblico .

Il codice è attualmente ospitato in sourceforge .

Altri suggerimenti

Il tuo testo SQL può contenere più comandi. Se si restituiscono più set di risultati, è possibile utilizzare un DataReader e utilizzare la funzione NextResult. Quello che faccio spesso è memorizzare l'SQL da eseguire come risorsa integrata, quindi caricare quel testo. Se contiene parametri, imposta i parametri come faresti normalmente.

Ad esempio, ho un file:

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

che eseguo come tale:

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();
}

Nota che MvcApplication.GetResource non è una funzione integrata - è una che devi scrivere ... ecco la mia:

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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top