针对Azure表存储的空表查询

时间:2011-01-03 16:21:38

标签: azure azure-storage azure-table-storage

我正在使用Azure表存储。当我查询一个空的表,其中涉及除PartitionKey和RowKey之外的参数时,我得到一个例外。当我至少有一行时,不会出现异常。如果我只使用PartitionKey和RowKey查询空表,那就没问题了。

我当然不想再做一次往返测试表是否为空。人们通常如何解决这个问题?是否有一种高效的方法来快速检查表是否为空?

我正在使用开发存储,正如我刚才看到的那样,在开发存储的情况下报告了错误,并且错误在生产中消失了。但是,我不想仅为开发存储保留自定义代码,是否有一种很好的方法可以解决这个问题,因此我可以使用相同的代码运行本地以及生产云环境?

2 个答案:

答案 0 :(得分:8)

我通过将DataServiceContext.IgnoreResoureNotFoundException属性设置为true来解决这个问题。希望这也有助于其他人。

答案 1 :(得分:0)

我无法让IgnoreResourceNotFoundException工作并惩罚它。采取'顽皮'的路线,只是被困在空桌子上的例外。剪断下面,享受......

CloudTableClient _tableClient = OurStorageAccount.CreateCloudTableClient();
CloudTable _table = _tableClient.GetTableReference( "customers" );

TableQuery<CustomerEntity> _query = new TableQuery<CustomerEntity>();
var _result = _table.ExecuteQuery( _query );

StringBuilder _sb = new StringBuilder(1024);
try
{ 
	_sb.AppendLine("Begin listing customers....<br/>");
	foreach ( CustomerEntity _customer in _result )
	{
		_sb.AppendFormat( "{0} {1} - {2} - {3}<br/>", _customer.PartitionKey, _customer.RowKey, _customer.Email, _customer.PhoneNumber );
	}
	_sb.AppendLine("End listing customers....<br/>");
}
catch ( System.NullReferenceException _nullEx )
{ 
	_sb.Append( System.DateTime.Now.ToString() );
	_sb.AppendLine( ": no customer entries found<br/>" );
	System.Diagnostics.Debug.WriteLine( _nullEx.ToString());
	// _sb.AppendLine( _nullEx.ToString() );
}
catch (Exception _ex)
{
	_sb.AppendLine("unkown exception thrown, good luck<br/>");
	_sb.AppendLine( _ex.ToString() );
}

Label_Output.Text = _sb.ToString();