是否可以在 ADO.NET 中实现多个存储过程调用的批处理(执行更新/删除)而不使用 DataAdapters?
dbDude
问问题
779 次
2 回答
2
您可以尝试使用 System.Data.SqlClient.SqlCommandSet。它实际上是内部的,但Ayende 制作了一个包装器将其公开。
代码当前托管在sourceforge中。
于 2008-12-31T11:18:12.550 回答
1
你的 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;
}
于 2008-12-31T09:59:45.377 回答