【发布时间】:2011-07-06 13:28:17
【问题描述】:
我正在开发一个与 Oracle 数据库通信的 C# 应用程序。
在我的应用程序中,用户从列表中选择多个项目并请求与这些选定项目相关的数据的报告/摘要。
我正在尝试将这些项目 ID 的列表/数组传递给数据库,以根据它们过滤结果集。我已经可以选择在运行时构建查询,但如果存在更好的解决方案,我更愿意使用。
关于性能和心理素质的最佳方法是什么?
欣赏它。
【问题讨论】:
我正在开发一个与 Oracle 数据库通信的 C# 应用程序。
在我的应用程序中,用户从列表中选择多个项目并请求与这些选定项目相关的数据的报告/摘要。
我正在尝试将这些项目 ID 的列表/数组传递给数据库,以根据它们过滤结果集。我已经可以选择在运行时构建查询,但如果存在更好的解决方案,我更愿意使用。
关于性能和心理素质的最佳方法是什么?
欣赏它。
【问题讨论】:
您可以使用 Linq To Sql 来执行此操作,但请注意,您将被限制为 2100 的数组大小。
【讨论】:
如果您可以访问 linq,我相信这会对您有所帮助。 http://www.albahari.com/nutshell/predicatebuilder.aspx
【讨论】:
我假设您需要帮助来创建一个包含列表的过程(如果我错了,请纠正我)。在 Oracle 方面,您可能会执行以下操作:
create or replace package my_package as
...
type t_id_tab is table of my_table.id%type index by pls_integer;
...
procedure do_work(i_ids in t_id_tab);
...
end my_package;
create or replace package body my_package as
...
procedure do_work(i_ids in t_id_tab, o_affected_cnt out number) is
begin
forall i in i_ids.first..i_ids.last
-- do something useful here, for example
insert into some_table(col1, col2, col3)
select col1, col2, col3 from some_other_table
where id = i_ids(i);
o_affected_cnt := SQL%ROWCOUNT;
commit;
end;
end my_package;
【讨论】: