Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.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# 通过SSMS(sql server management studio)使用Azure本地开发存储_C#_Azure_Azure Storage_Azure Table Storage - Fatal编程技术网

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

C# 通过SSMS(sql server management studio)使用Azure本地开发存储,c#,azure,azure-storage,azure-table-storage,C#,Azure,Azure Storage,Azure Table Storage,我正在尝试编写代码以访问azure本地开发存储。我首先为自己创建了一个新的存储: dsInit /forceCreate 我现在可以在SSMS中看到DevelopmentStorageDb20090919,其中包含一些预创建的表,如dbo.TableContainer、dbo.TableRow等 现在,我可以简单地通过SSMS(例如Employee table)向这个数据库添加表,并开始通过代码访问它们吗?这样做对吗 例如: var svc = CloudStorageAccount.

我正在尝试编写代码以访问azure本地开发存储。我首先为自己创建了一个新的存储:

dsInit /forceCreate
我现在可以在SSMS中看到DevelopmentStorageDb20090919,其中包含一些预创建的表,如dbo.TableContainer、dbo.TableRow等

  • 现在,我可以简单地通过SSMS(例如Employee table)向这个数据库添加表,并开始通过代码访问它们吗?这样做对吗 例如:

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

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

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


    目前还没有在Azure表之间传输数据的奇特方法(无论是在开发人员存储中还是在云中)。它归结为运行一个查询,从源表中选择所有内容,然后将每个单独的项写入目标表。根据数据的分区方式,您可以批处理写操作,也可以并行执行写操作。如果您愿意直接使用REST API,则可以避免存储库在写入每个项之前必须对其进行反序列化。

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


    目前还没有在Azure表之间传输数据的奇特方法(无论是在开发人员存储中还是在云中)。它归结为运行一个查询,从源表中选择所有内容,然后将每个单独的项写入目标表。根据数据的分区方式,您可以批处理写操作,也可以并行执行写操作。如果您愿意直接使用REST API,则可以避免存储库在写入每个项之前必须对其进行反序列化。

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

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


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

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

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


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

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

    我曾经遇到过一个重命名大型Blob的问题—操作将超时(请注意,Blob无法重命名—首先需要使用CopyFromBlob()复制它们,然后将其删除)。我在Azure Storage Explorer中进行了尝试,并编写了代码并增加了所有超时。解决方案救命啊

    下面是一个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的方式。

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

    我曾经遇到过一个重命名大型Blob的问题—操作将超时(请注意,Blob无法重命名—首先需要使用CopyFromBlob()复制它们,然后将其删除)。我在Azure Storage Explorer中进行了尝试,并编写了代码并增加了所有超时。解决方案救命啊

    下面是一个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的方式。

    还有一个问题——我真的需要一个dsInit'ed数据库来在本地使用吗?难道我不能简单地转到SSMS->右键单击数据库->以我想要的方式创建一个新的数据库,并进行连接到它的所有编码吗?这个