c# - FirebirdSql (C#) 比在 FlameRobin 中执行脚本慢

标签 c# sql sql-server firebird

我的 .NET 项目中有 FirebirdSql dll 版本 4.1,它连接到 Firebird Sql 服务器版本 2.1,我使用 FlameRobin 客户端(非常方便的工具)测试我的 sql 脚本。

无论如何,我面临的问题是,我在 FlameRobin 中执行的每个脚本都非常快,但是在我的 .NET 项目中通过 FirebirdSql 运行相同的脚本时,它需要更长的时间。也许对此没有简单的答案,有没有人知道为什么这在我的 C# 项目中运行如此缓慢?

这是我在 Flamerobin 中执行的 sql 脚本,执行需要一瞬间:

SELECT t.S_ID, t.TR_SEQ, t.TR_DATE, t.TR_TIME, t.TR_TERM_SLA, r.DR_NAME, t.TR_DPT_NO, t.TR_EVENT, ev.ET_DESC, t.TR_DIRECTION, t.TR_TAG_CODE, m.MST_FIRST_NAME, m.MST_LAST_NAME, t.TR_TT_TYPENO, t.TR_MSTSQ, t.TR_REASON_CODE, t.TR_PROCESSED
from TRANSACK t left outer join MASTER m on t.TR_MSTSQ = m.MST_SQ, EVENT_TYPE ev, READER r
where ev.ET_TYPENO = t.TR_EVENT and r.T_ADDR = t.TR_TERM_SLA and 20140205 <= t.TR_DATE and 20140206 >= t.TR_DATE and (m.MST_LAST_NAME like '%' or m.MST_LAST_NAME is null) and (m.MST_FIRST_NAME like '%' or m.MST_FIRST_NAME is null) and t.TR_TAG_CODE like '%'
order by t.TR_DATE desc, t.TR_SEQ desc

这是我的 C# 项目中的同一个脚本,执行只需 10 多秒:

_firebirdContext.OpenConnection();
List<Transaction> stuffFromTransactions = new List<Transaction>();

FbCommand readTransaction = new FbCommand("SELECT t.S_ID, t.TR_SEQ, t.TR_DATE, t.TR_TIME, t.TR_TERM_SLA, r.DR_NAME, t.TR_DPT_NO, t.TR_EVENT, ev.ET_DESC, " + 
    "t.TR_DIRECTION, t.TR_TAG_CODE, m.MST_FIRST_NAME, m.MST_LAST_NAME, t.TR_TT_TYPENO, t.TR_MSTSQ, t.TR_REASON_CODE, t.TR_PROCESSED " +
    "from TRANSACK t left outer join MASTER m on t.TR_MSTSQ = m.MST_SQ, EVENT_TYPE ev, READER r " + 
    "where ev.ET_TYPENO = t.TR_EVENT and r.T_ADDR = t.TR_TERM_SLA and 20140205 <= t.TR_DATE and 20140206 >= t.TR_DATE and (m.MST_LAST_NAME like '%' or m.MST_LAST_NAME is null) and (m.MST_FIRST_NAME like '%' or m.MST_FIRST_NAME is null) and t.TR_TAG_CODE like '%'" +         
    "order by t.TR_DATE desc, t.TR_SEQ desc", _firebirdContext.FbConnection);
FbDataReader transactionReader = readTransaction.ExecuteReader();
while (transactionReader.Read())
{
    Transaction transaction = new Transaction();
    if (!Convert.IsDBNull(transactionReader[0]))
    {
        transaction.S_ID = (int)transactionReader[0];
    }
    if (!Convert.IsDBNull(transactionReader[1]))
    {
        transaction.TR_SEQ = (int)transactionReader[1];
    }

    // ...
    // abbreviated
    // ...

    if (!Convert.IsDBNull(transactionReader[16]))
    {
        transaction.TR_PROCESSED = (Int16)transactionReader[16];
    }
    stuffFromTransactions.Add(transaction);
}
transactionReader.Close();
_firebirdContext.CloseConnection();
return stuffFromTransactions;

最佳答案

可能您没有获取 FlameRobin 中的所有记录,只是查看网格中的第一个 x

关于c# - FirebirdSql (C#) 比在 FlameRobin 中执行脚本慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21643819/

相关文章:

mysql - SQL JOIN 两个表与 AVG

sql - 删除编号重复超过 5 次的记录

SQL Server : get date with inparameters year, 周,工作日

SQL Server 2005 : Round returns incorrect value if I use a float variable

c# - 添加所有抽象成员的非impemented stub 的简单方法

c# - 已添加具有相同键的项目...ASP.NET MVC4

SQL:如何从大型连续矩阵中选择矩形范围内的元素? **更新**

c# - 如何处理从SQL抛出的错误消息到controller.cs

c# - WPF DataTrigger 更改控件

c# - 使用knockoutjs过滤有界项目