- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用一个非常复杂的查询从我们的一个计费数据库中检索一些数据。
我遇到了一个问题,当使用 SQL Developer 执行时,查询似乎很快完成,但在使用 OracleDataAdapter.Fill()
时似乎永远不会完成。方法。
我只尝试读取大约 1000 行,查询在 SQL Developer 中完成大约 20 秒。
是什么导致了如此巨大的性能差异?我有很多其他查询可以使用相同的功能快速运行。
这是我用来执行查询的代码:
using Oracle.DataAccess.Client;
...
public DataTable ExecuteExternalQuery(string connectionString, string providerName, string queryText)
{
DbConnection connection = null;
DbCommand selectCommand = null;
DbDataAdapter adapter = null;
switch (providerName)
{
case "System.Data.OracleClient":
case "Oracle.DataAccess.Client":
connection = new OracleConnection(connectionString);
selectCommand = connection.CreateCommand();
adapter = new OracleDataAdapter((OracleCommand)selectCommand);
break;
...
}
DataTable table = null;
try
{
connection.Open();
selectCommand.CommandText = queryText;
selectCommand.CommandTimeout = 300000;
selectCommand.CommandType = CommandType.Text;
table = new DataTable("result");
table.Locale = CultureInfo.CurrentCulture;
adapter.Fill(table);
}
finally
{
adapter.Dispose();
if (connection.State != ConnectionState.Closed)
{
connection.Close();
}
}
return table;
}
with
trouble_calls as
(
select
work_order_number,
account_number,
date_entered
from
work_orders
where
date_entered >= sysdate - (15 + 31) -- Use the index to limit the number of rows scanned
and
wo_status not in ('Cancelled')
and
wo_type = 'Trouble Call'
)
select
account_number,
work_order_number,
date_entered
from
trouble_calls wo
where
wo.icoms_date >= sysdate - 15
and
(
select
count(*)
from
trouble_calls repeat
where
wo.account_number = repeat.account_number
and
wo.work_order_number <> repeat.work_order_number
and
wo.date_entered - repeat.date_entered between 0 and 30
) >= 1
最佳答案
这段代码帮助了我,试试看:
using (OracleConnection conn = new OracleConnection())
{
OracleCommand comm = new OracleCommand();
comm.Connection = conn;
comm.FetchSize = comm.FetchSize * 16;
comm.CommandText = "select * from some_table";
try
{
conn.Open();
OracleDataAdapter adap = new OracleDataAdapter(comm);
System.Data.DataTable dt = new System.Data.DataTable();
adap.Fill(dt);
}
finally
{
conn.Close();
}
}
comm.FetchSize = comm.FetchSize * 16;
OracleConnection myConnection = new OracleConnection(myConnectionString);
OracleCommand myCommand = new OracleCommand(mySelectQuery, myConnection);
myConnection.Open();
using (OracleDataReader reader = myCommand.ExecuteReader(CommandBehavior.CloseConnection))
{
// here goes the trick
// lets get 1000 rows on each round trip
reader.FetchSize = reader.RowSize * 1000;
while (reader.Read())
{
// reads the records normally
}
}// close and dispose stuff here
关于.net - 为什么 OracleDataAdapter.Fill() 很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2434654/
我使用一种方法来使用 Select statiments 获取。当我使用链接数据库使用 select statiment 时,我得到了错误(ORA-01453 SET TRANSATION 必须是第一
我正在为我的应用程序配置文件中定义的 SQL Server 和 Oracle 数据库编写 C# 应用程序。当我在 SQL Server 环境中运行代码时,它工作正常。我得到正确的结果。 工作的 SQL
我在访问 oracle 的项目中使用 OPD.NET dll。 用户可以在文本框中输入任何 SQL,然后对数据库执行。我一直在尝试使用 OracleDataAdapter 用结果集填充数据表,但我希望
我在我的项目中使用网格,这些网格是通过 DataSet 填充的s 和 DataTable秒。我用 DataNavigator关于 grid s 用于插入、删除和更新行,我想将更改提交给 databas
我目前正在结合使用 Controller 类和数据访问层类(UserDAL 类)来更改数据库。但是我知道我的代码很脆弱,因为我没有使用参数化查询。 我已经从示例中了解到如何使用命令对象来使用查询。但是
我正在使用一个非常复杂的查询从我们的一个计费数据库中检索一些数据。 我遇到了一个问题,当使用 SQL Developer 执行时,查询似乎很快完成,但在使用 OracleDataAdapter.Fil
我有一个连接到远程服务器以查询数据的 C# 程序。数据很大,所以查询大约需要 2 分钟才能完成。在这 2 分钟的时间内,互联网中断了。这导致作业无法完成,程序卡在获取数据例程中。 它建立了连接,但在选
我正在为 MySQL、SQL Server 和 Oracle 使用这种代码。对于 MySQL 和 SQL Server,它工作得很好。对于 Oracle,在执行 adapter.Fill(datase
我似乎无法在 Google(或 StackOverflow)的任何地方找到这个问题,这真的让我感到惊讶,所以我把它放在这里以帮助处于相同情况的其他人。 我有一个在 Oracle Sql Develop
我做了以下事情: protected int CreateComponent(DbConnection cnctn, string tableName) { int newId; Db
我是一名优秀的程序员,十分优秀!