Ваш текст 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;
}