我正在使用Azure表存储。当我查询一个空的表,其中涉及除PartitionKey和RowKey之外的参数时,我得到一个例外。当我至少有一行时,不会出现异常。如果我只使用PartitionKey和RowKey查询空表,那就没问题了。
我当然不想再做一次往返测试表是否为空。人们通常如何解决这个问题?是否有一种高效的方法来快速检查表是否为空?
我正在使用开发存储,正如我刚才看到的那样,在开发存储的情况下报告了错误,并且错误在生产中消失了。但是,我不想仅为开发存储保留自定义代码,是否有一种很好的方法可以解决这个问题,因此我可以使用相同的代码运行本地以及生产云环境?
答案 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();