我正在尝试通过使用数组绑定到 OracleParameter 来提高我的 Oracle SQL 查询的性能。
这基本上是我想要做的:
List<string> IDValList = new List<string>();
IDValList.Add( "IDOne" );
IDValList.Add( "IDTwo" );
List<int> sizes = new List<int>();
foreach( string id in IDValList )
{
sizes.Add( id.Length );
}
using( OracleCommand cmd = new OracleCommand( "select col1, col2, col3 from table where col4 in ( :idArray )", _conn ) )
{
cmd.CommandType = System.Data.CommandType.Text;
OracleParameter arrayParam = new OracleParameter( "idArray", OracleDbType.Varchar2 );
arrayParam.Direction = System.Data.ParameterDirection.Input;
arrayParam.Value = IDValList.ToArray();
arrayParam.ArrayBindSize = sizes.ToArray();
cmd.ArrayBindCount = IDValList.Count;
cmd.Parameters.Add( arrayParam );
using( OracleDataReader dr = cmd.ExecuteReader() )
{
while( dr.Read() )
{
// now read the row...
这会编译并运行,但对于第一个 ID,我总是只返回一行。就像它忽略参数中数组中的其余值一样。
有趣的是,参数的 ArrayBindStatus 对所有值都是成功的。
我错过了什么?或者这不适用于 OracleReader?
谢谢
编辑:基本上,我正在尝试遵循此示例,但我希望能够使用 DataReader 从查询中读取结果数据集。
http://www.oracle.com/technology/oramag/oracle/09-sep/o59odpnet.html