Pregunta

¿Es posible implementar lotes de múltiples llamadas a procedimientos almacenados (haciendo actualizaciones / eliminaciones) en ADO.NET sin tener que recurrir a DataAdapters?

¿Fue útil?

Solución

Puedes intentar usar System.Data.SqlClient.SqlCommandSet. En realidad es interno, pero Ayende hizo un envoltorio para hacerlo público .

El código está actualmente alojado en sourceforge .

Otros consejos

Tu texto SQL puede contener múltiples comandos. Si devuelve varios conjuntos de resultados, entonces puede usar un DataReader y la función NextResult. Lo que a menudo hago es almacenar el SQL para ejecutarlo como un recurso incrustado y luego cargar ese texto. Si contiene parámetros, configúrelos como lo haría normalmente.

Por ejemplo, tengo un archivo:

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 ejecuto como tal:

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

Tenga en cuenta que MvcApplication.GetResource no es una función incorporada, es una que debe escribir ... aquí está la mía:

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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top