通过SSMS使用Azure本地开发存储(sql server management studio)

时间:2010-12-07 21:52:59

标签: c# azure azure-storage azure-table-storage

我正在尝试编写代码来访问我的azure本地开发存储。我开始为自己创建一个新的存储空间:

dsInit /forceCreate

我现在可以在SSMS中看到带有一些预先创建的表格的DevelopmentStorageDb20090919,例如dbo.TableContainer,dbo.TableRow等。

  1. 现在,我可以通过SSMS(例如Employee表)简单地将表添加到此数据库并开始通过代码访问它们吗?这是做正确的事吗?
  2. 例如:

        var svc = CloudStorageAccount.DevelopmentStorageAccount
    .CreateCloudTableClient().GetDataServiceContext();
    
                    //"Employees" is the name of the table                
                    svc.AddObject("Employees", new Employees("John Doe"));    
                    svc.SaveChangesWithRetries();
    

    2。此外,一旦完成,我如何将表和数据移植到实际的云帐户?通过在那里运行脚本?

3 个答案:

答案 0 :(得分:1)

我认为您将Azure表存储与SQL Server或SQL Azure混淆,这两者完全不同。您无法使用SSMS访问Azure存储表。您提供的代码示例使用的是Azure SDK(使用下面的Storage REST API)。这是访问Azure存储的唯一方法。

如果您想以更加图形化的方式创建/查看表格,请尝试使用Cerebrata的Cloud Storage Studio,ClumsyLeaf的AzureXplorer,David Pallman的Azure Storage Explorer或其他类似的工具。这些工具都依赖于SDK或直接API调用。

现在,关于您的代码:您需要在插入对象之前创建表。请参见CreateTablesFromModel()和CreateTableIfNotExist()。 Azure Platform Training Kit有一个很好的介绍/实验用于创建和使用表,并展示了如何使用CreateTablesFromModel()。

答案 1 :(得分:0)

只要该表存在,那么是的,您编写的代码会将“John Doe”添加到employees表中。虽然通过SSMS查看数据可能很有趣,但您可以尝试以这种方式更改数据,但我不建议您尝试使用它。开发存储很有趣,没有用棍子戳它。开发存储和实际云存储之间存在差异,因此我发现越早停止使用开发存储就越好。

目前,在Azure表之间没有花哨的数据传输方式(无论是在dev存储中还是在云中)。它归结为运行一个查询,从源表中选择所有内容,然后将每个项目写入目标表。根据数据的分区方式,您可以批量写入,也可以并行执行。如果您愿意直接使用REST API,则可以避免存储库在编写之前对每个项目进行反序列化。

答案 2 :(得分:0)

尽管最好使用API​​与DevStorage交谈,但可能存在直接数据库访问可能有益的情况。更具体地说,它可以用来规避某些特定于DevStorage的SDK问题。

我曾经遇到过重命名大blob的问题 - 操作只会超时(注意blob无法重命名 - 首先需要使用CopyFromBlob()复制它们然后删除)。我在Azure存储资源管理器中尝试了两种方法,并编写了代码并增加了所有超时。解? SQL救援!

以下是一个SQL示例,它将重命名容器中的blob或将其移动到另一个容器中:

begin tran

alter table CommittedBlock nocheck constraint BlockBlob_CommittedBlock

update CommittedBlock set BlobName = @TargetBlobName, ContainerName = @TargetContainerName where BlobName = @SourceBlobName and ContainerName = @SourceContainerName
update BlockData set BlobName = @TargetBlobName, ContainerName = @TargetContainerName where BlobName = @SourceBlobName and ContainerName = @SourceContainerName
update Blob set BlobName = @TargetBlobName, ContainerName = @TargetContainerName where BlobName = @SourceBlobName and ContainerName = @SourceContainerName

alter table CommittedBlock with check check constraint BlockBlob_CommittedBlock

rollback tran

当然,使用它需要您自担风险 - 这是完全不支持使用dev stotage的方式。