Frage

Ist es möglich, Dosieren mehrerer Aufrufe von gespeicherten Prozeduren zu implementieren (tun updates / löscht) in ADO.NET, ohne Rückgriff Dataadapters?

War es hilfreich?

Lösung

Sie könnten versuchen, System.Data.SqlClient.SqlCommandSet verwenden. Es ist eigentlich intern, aber Ayende einen Wrapper es öffentlich .

-Code wird zur Zeit in Source .

Andere Tipps

Sie sind SQL-Text mehrere Befehle enthalten. Wenn Sie mehrere Ergebnismengen zurückgeben, dann können Sie einen Datareader verwenden und die Nextresult-Funktion verwenden. Was ich oft zu tun ist, um die SQL speichern als eingebettete Ressource auszuführen, dann diesen Text laden. Wenn es Parameter enthält, stellen Sie dann die Parameter genau wie würden Sie normalerweise.

Zum Beispiel, ich habe eine Datei:

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

, dass ich ausführen als solche:

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

Beachten Sie, dass MvcApplication.GetResource nicht über eine eingebaute Funktion ist - es ist eine Sie zu schreiben haben ... hier ist meins:

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top