Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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# Azure表查询:System.InvalidOperationException:';已经有一个与此命令关联的打开的DataReader,必须先关闭它;_C#_Azure Table Storage_Azure Tablequery - Fatal编程技术网

C# Azure表查询:System.InvalidOperationException:';已经有一个与此命令关联的打开的DataReader,必须先关闭它;

C# Azure表查询:System.InvalidOperationException:';已经有一个与此命令关联的打开的DataReader,必须先关闭它;,c#,azure-table-storage,azure-tablequery,C#,Azure Table Storage,Azure Tablequery,在表执行查询期间,我偶尔会遇到以下错误 System.InvalidOperationException:'已经有一个与此命令关联的打开的DataReader,必须先关闭它。' 私有云表; 公共AzureTableManager(字符串_CloudTableName) { if(string.IsNullOrEmpty(_CloudTableName)) { 抛出新ArgumentNullException(“表”,“表名不能为空”); } 尝试 { string ConnectionStrin

在表执行查询期间,我偶尔会遇到以下错误

System.InvalidOperationException:'已经有一个与此命令关联的打开的DataReader,必须先关闭它。'

私有云表;
公共AzureTableManager(字符串_CloudTableName)
{
if(string.IsNullOrEmpty(_CloudTableName))
{
抛出新ArgumentNullException(“表”,“表名不能为空”);
}
尝试
{
string ConnectionString=primarisoms.Properties.Settings.Default.AzureTableStorage.ToString();
CloudStorageAccount-storageAccount=CloudStorageAccount.Parse(ConnectionString);
CloudTableClient tableClient=storageAccount.CreateCloudTableClient();
table=tableClient.GetTableReference(\u CloudTableName);
table.CreateIfNotExists();
}
捕获(StorageException StorageExceptionObj)
{
抛出StorageExceptionObj;
}
捕获(异常BJ)
{
抛出例外bj;
}
}
公共列表检索实体(string-TenantName,string-Query=null),其中T:TableEntity,new()
{
TableQuery DataTableQuery=新建TableQuery();
如果(!String.IsNullOrEmpty(查询))
{
Query+=“和PartitionKey eq'”+TenantName+“'”;
}
else{Query=“PartitionKey eq'+TenantName+”;}
DataTableQuery=新建TableQuery()。其中(查询);
IEnumerable IDataList=table.ExecuteQuery(DataTableQuery);
List DataList=新列表();
foreach(IDataList中的var singleData)
DataList.Add(singleData);
返回数据列表;
}
此处返回错误:

IEnumerable<T> IDataList = table.ExecuteQuery(DataTableQuery);
IEnumerable IDataList=table.ExecuteQuery(DataTableQuery);
这是我的示例通话:

List<AzureTableManager.DTTConfig> dtt = TableManagerObj.RetrieveEntity<AzureTableManager.DTTConfig>(tenantID, "RowKey eq 'Mass WhatIf'");
List dtt=TableManagerObj.RetrieveEntity(tenantID,“RowKey eq‘Mass WhatIf’”);
在SQL连接中,使用block或确保读卡器已关闭来克服此问题。
我在这里如何处理它?

您可以尝试将引用更新到最新版本的
WindowsAzure.Storage

在新版本中,
CloudTable
类不再包含
ExecuteQuery
方法。相反,它有
ExecuteQueryAsync
ExecuteQuerySegmentedAsync
方法

此代码适用于我获取数据:

public static async Task<List<T>> ExecuteQueryToListAsync<T>(this CloudTable table, TableQuery<T> query) where T : ITableEntity, new()
{
    var result = new List<T>();

    TableContinuationToken token = null;
    do
    {
        TableQuerySegment<T> seg = await table.ExecuteQuerySegmentedAsync(query, token);
        token = seg.ContinuationToken;
        result.AddRange(seg);
    }
    while (token != null);

    return result;
}
公共静态异步任务ExecuteQueryToListSync(此CloudTable表,TableQuery查询),其中T:ITableEntity,new()
{
var result=新列表();
TableContinuationToken=空;
做
{
TableQuerySegment seg=wait table.ExecuteQuerySegmentedAsync(查询,令牌);
令牌=seg.ContinuationToken;
结果:AddRange(seg);
}
while(令牌!=null);
返回结果;
}

您能分享完整的代码吗?在这个问题之前,我从未见过Azure表中的
DataReader
Command
。@GauravMantri-添加了其余的代码。这实际上是来自Microsoft.WindowsAzure.Storage.Table的标准调用。这里没有显式的DataReader调用。谢谢分享代码。你能告诉我哪行代码会抛出你得到的错误吗?另外,请在我的问题后的
RetrieveEntity
@GauravMantri处分享您呼叫的代码。请注意,调用有时是每秒钟完成一次的。我确实使用了最新版本-9.3.3,它同时公开了ExecuteQuery和ExecuteQueryAsync。它在没有任何代码更改的情况下以某种方式再次工作,因此我无法验证您的建议。也许是时候升级到
public static async Task<List<T>> ExecuteQueryToListAsync<T>(this CloudTable table, TableQuery<T> query) where T : ITableEntity, new()
{
    var result = new List<T>();

    TableContinuationToken token = null;
    do
    {
        TableQuerySegment<T> seg = await table.ExecuteQuerySegmentedAsync(query, token);
        token = seg.ContinuationToken;
        result.AddRange(seg);
    }
    while (token != null);

    return result;
}