微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用C#的Azure表存储插入未插入表

如何解决使用C#的Azure表存储插入未插入表

我是Azure Table Storage的新手,并且学习了许多教程,但无法获得任何代码来将数据插入表中。实际上,我现在通过导入具有数据的csv文件来使用Azure Storage Explorer填充表。我可以使用以下代码从这些表中检索数据。

public async Task<CurrencyEntity> GetCurrencyDataForDate(string currency,string date)
    {
        //ensure variables match key formats
        currency = currency.toupper();
        //var stringDate = date.ToString("yyyy-MM-dd");
        
        var table = GetCloudTable(CcdConn,TableName);
        var retrieveOperation = TableOperation.Retrieve<CurrencyEntity>(currency,date);
        var result = await table.ExecuteAsync(retrieveOperation);

        var dto =  result?.Result as CurrencyEntity;
        return dto;
    }

CurrencyEntity在哪里

public class CurrencyEntity : TableEntity
{
    public CurrencyEntity() { }
    public CurrencyEntity(string currency,string date)
    {
        Currency = currency;
        Date = date;

        PartitionKey = currency;
        RowKey = date;
    }
    public CurrencyEntity(string currency,string date,string close)
    {
        Currency = currency;
        Date = date;
        Close = close;

        PartitionKey = currency;
        RowKey = date;
    }

    public string Currency { get; set; }
    public string Date { get; set; }
    public string Close { get; set; }
    
}

但是这种方法虽然可以运行直到完成并返回CurrencyEntity

 public async Task<CurrencyEntity> InsertNewCurrencyEntityAsync(CurrencyEntity currencyEntity)
    {
        //ensure values have proper format
        currencyEntity.Currency = currencyEntity.Currency.toupper();
        var parts = currencyEntity.Date.Split("-");
        if (parts.Length != 3) return null;
        if (parts[0].Length != 4 || parts[1].Length != 2 || parts[2].Length != 2) return null;

        TableResult result;
        var insertOrMergeOperation = TableOperation.InsertOrMerge(currencyEntity);
        var table = GetCloudTable(CcdConn,TableName);
        // Execute the operation.
        try
        {
            result = await table.ExecuteAsync(insertOrMergeOperation);
        }
        catch (Exception e)
        {
            //Value cannot be null. (Parameter 'Upserts require a valid PartitionKey') The details are: 
            var message = $"{e.Message} The details are: {e.InnerException}";
            throw;
        }
        //var result = await table.ExecuteAsync(insertOrMergeOperation);
        var newCurrency = (CurrencyEntity)result.Result;

        return newCurrency;

    }

它返回如下所示的newCurrency

enter image description here

即使没有异常,错误的Timestamp属性也会给出一些故障指示。 检索此数据时,它返回null(未插入)

解决方法

我认为问题是由于您实际上在InsertOrMerge函数中使用的是Insert方法而不是InsertNewCurrencyEntityAsync(CurrencyEntity currencyEntity)方法。

如果要插入新记录,请使用Insert方法,如下所示:

public async Task<CurrencyEntity> InsertNewCurrencyEntityAsync(CurrencyEntity currencyEntity)
{

   //other code

    TableResult result;

    //var insertOrMergeOperation = TableOperation.InsertOrMerge(currencyEntity);

    //use the Insert method if you want to add a new record.
    var insertOrMergeOperation = TableOperation.Insert(currencyEntity);

    var table = GetCloudTable(CcdConn,TableName);

   
  //other code

 }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。