Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 填充列表的最有效方法<;int>;通过ADO.NET调用存储过程_C#_Mysql_Stored Procedures_Ado.net - Fatal编程技术网

C# 填充列表的最有效方法<;int>;通过ADO.NET调用存储过程

C# 填充列表的最有效方法<;int>;通过ADO.NET调用存储过程,c#,mysql,stored-procedures,ado.net,C#,Mysql,Stored Procedures,Ado.net,我正在通过ADO.NET调用一个存储过程,如下所示(简化形式)。该数据库是一个MySQL数据库。 存储过程返回一个ID值列表,这些ID值对应于需要重新安排调用时间的调用。 C代码将它们存储在一个列表中 我的问题是:有没有一种更有效的方法将值放入C#list,而不是像我现在这样使用DataReader? 我还不知道我这样做是否对我们的应用程序来说效率太低(这将在测试期间确定),我只是在寻找一种更快的策略,如果存在的话 我研究了如何使用数据集,但据我所知,如果ID-s列表很大(可能很大),则速度可能

我正在通过ADO.NET调用一个存储过程,如下所示(简化形式)。该数据库是一个MySQL数据库。 存储过程返回一个ID值列表,这些ID值对应于需要重新安排调用时间的调用。 C代码将它们存储在一个列表中

我的问题是:有没有一种更有效的方法将值放入C#list,而不是像我现在这样使用DataReader? 我还不知道我这样做是否对我们的应用程序来说效率太低(这将在测试期间确定),我只是在寻找一种更快的策略,如果存在的话

我研究了如何使用数据集,但据我所知,如果ID-s列表很大(可能很大),则速度可能会较慢。 另外,根据我所读到的,LINQ可能也会慢一些

我只需要将列表存储到callsToRescheduleList中;也就是说,我不需要对ID-s进行任何随机访问,所以不需要数据集的那些特性。 我只是在寻找最快的方法将数据放入列表中

有什么建议吗

C#代码:

MySQL存储过程:

CREATE PROCEDURE `spPhy_GetCallsToRescheduleListPreviousDays` ()
BEGIN
       SELECT
             id
       FROM callrequest
       WHERE
             dialerCampaignId = 'CATH001’
             AND
             status = 'SCHEDULED’
    ;
END

好吧,这是最好的选择——选择范围很窄,在紧循环中使用读卡器顺序重载也很好

一些检查:

  • 确保MySql中的
    (dialerCampaignId,status)
    上有索引(键)——我假设这里的
    dialerCampaignId有更好的选择性
  • <> LI>如果您的代码< >清单>代码>消费者不会每次迭代完整列表,作为将数据滚动到列表中的一种选择,也考虑使用枚举和收益返回:

public IEnumerable GetCallsToRescheduleListPreviousDays()
{
使用(var cmd=new MySqlCommand)
( 
“`phytel`.`spPhy\u GetCallsToRescheduleListPreviousDays`,
(MySqlConnection)数据库连接,workerTransaction
)
{
cmd.CommandType=CommandType.storedProcess;
使用(var reader=cmd.ExecuteReader())
{
if(reader.HasRows)
{
while(reader.Read())
{
产生返回读取器GetInt32(0);
}
}
}
}
}

还要记住处置
IDisposable
资源,如
命令
读卡器

您可以查看类似ORM的实体框架或NHibernate
CREATE PROCEDURE `spPhy_GetCallsToRescheduleListPreviousDays` ()
BEGIN
       SELECT
             id
       FROM callrequest
       WHERE
             dialerCampaignId = 'CATH001’
             AND
             status = 'SCHEDULED’
    ;
END
public IEnumerable<int> GetCallsToRescheduleListPreviousDays()
{
    using (var cmd = new MySqlCommand
    ( 
       "`phytel`.`spPhy_GetCallsToRescheduleListPreviousDays`", 
       (MySqlConnection) DatabaseConnection,  workerTransaction
    )
    {
      cmd.CommandType = CommandType.StoredProcedure;
      using (var reader = cmd.ExecuteReader())
      {
        if (reader.HasRows)
        {
           while( reader.Read())
           {
               yield return reader.GetInt32(0);
           }
        }
      }
    }
}