سؤال

هل من الممكن لتنفيذ التجميع من عدة استدعاءات الإجراء المخزن (القيام بتحديثات / حذف) في ADO.NET دون اللجوء إلى DataAdapters؟

نصائح أخرى

وأنت نص SQL يمكن أن تحتوي على عدة أوامر. إذا كنت إرجاع مجموعات نتائج متعددة، ثم يمكنك استخدام DataReader واستخدام وظيفة NextResult. ما أنا في كثير من الأحيان القيام به هو تخزين SQL لتنفيذ باعتبارها جزءا لا يتجزأ من الموارد، ثم تحميل هذا النص. إذا كان يحتوي على المعلمات، ثم تعيين المعلمات مثلما تفعل عادة.

وعلى سبيل المثال، ولدي ملف:

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

وأنني تنفيذ هذا النحو:

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

لاحظ أن MvcApplication.GetResource ليس بنيت في وظيفة - انها واحدة عليك أن تكتب ... هنا الألغام:

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;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top