2010-12-07 69 views
1

我正在嘗試編寫代碼來訪問我的azure本地開發存儲。我開始通過創建自己的新存儲:通過SSMS使用Azure本地開發存儲(sql server management studio)

dsInit /forceCreate 

我現在可以看到在SSMS的DevelopmentStorageDb20090919一些預先創建的表格,如dbo.TableContainer,dbo.TableRow等

  1. 現在,可以我只需通過SSMS將表添加到此數據庫(例如Employee表),並通過代碼開始訪問它們?這是做事的正確方法嗎?

例如:

var svc = CloudStorageAccount.DevelopmentStorageAccount 
.CreateCloudTableClient().GetDataServiceContext(); 

       //"Employees" is the name of the table     
       svc.AddObject("Employees", new Employees("John Doe"));  
       svc.SaveChangesWithRetries(); 

2。另外,一旦我完成了所有工作,我該如何將表格和數據移植到實際的雲賬戶中?通過在那裏運行腳本?

回答

0

只要該表存在,那麼是的,您編寫的代碼會將「John Doe」添加到employees表中。雖然通過SSMS查看數據可能很有趣,但您可以嘗試以這種方式更改數據,但我不建議嘗試它。開發存儲非常有趣,不需要用棍子戳它。開發存儲和實際雲存儲之間存在差異,所以我發現越早可以停止使用開發存儲越好。

目前,在Azure表(無論是在開發存儲還是在雲中)之間傳輸數據的方式並不多。它歸結爲運行一個查詢來選擇源表中的所有內容,然後將每個單獨的項目寫入目標表。根據數據的分區方式,您可以批量寫入數據,也可以並行執行數據寫入。如果您願意直接使用REST API,則可避免存儲庫在寫入之前必須對每個項目進行反序列化。

+0

還有一個問題 - 我真的需要一個dsInit的數據庫來與本地工作嗎?我不能簡單地去SSMS->右鍵點擊數據庫 - >以我想要的方式創建一個新的數據庫,並執行我所有的編碼連接到它?然後當我完成所有工作時,只需在sql-azure上運行導出的sql腳本?如果是這樣,這個dsInit'ed dev存儲的用途是什麼? – DeeStackOverflow 2010-12-07 23:31:29

+0

查看我的答案 - Azure存儲和SQL完全不同。 dsinit只需在本地SQL Server(或SQL Express)中創建表以「模擬」表存儲。在Azure本身中,它根本不依賴於SQL Server。 – 2010-12-08 02:18:33

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()。

0

即使最好使用API​​與DevStorage對話,也可能會出現直接訪問數據庫可能有用的情況。更具體地說,它可以用來規避特定於DevStorage的一些SDK問題。

我曾遇到重命名大塊的問題 - 操作會超時(請注意,塊不能重命名 - 它們首先需要使用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一起工作的方式。

相關問題