数据未插入Azure Sql数据库

时间:2014-12-15 00:25:21

标签: c# sql asp.net-mvc azure azure-sql-database

这是我第一次使用Azure而且我遇到了问题。

我的MVC项目中有一个注册和登录脚本,它在我的本地计算机上运行正常但是当我尝试使用Azure时,我在页面上收到此消息“处理您的请求时出错。”

我已经在防火墙中允许了IP。 我已将数据库与网站链接。

该项目使用代码优先模型。当我尝试注册时,它将在数据库中创建表,但不会输入用户数据。所以我剩下的就是一张空桌子。

当我尝试从Sql management studio部署我的数据库时,它会创建表但无法输入数据。

我做错了什么?

修改

因此,当我尝试从SQL Management Studio部署数据库时,这是导入数据库时​​出现的错误

TITLE: Microsoft SQL Server Management Studio
------------------------------

Could not import package.
Warning SQL0: A project which specifies SQL Server 2012 as the target platform may experience compatibility issues with SQL Azure.
Error SQL72014: .Net SqlClient Data Provider: Msg 40511, Level 15, State 1, Line 2 Built-in function 'newsequentialid' is not supported in this version of SQL Server.
Error SQL72045: Script execution error.  The executed script:
ALTER TABLE [dbo].[Domains]
    ADD DEFAULT (newsequentialid()) FOR [DomainId];


 (Microsoft.SqlServer.Dac)

我认为这是由于我的模型使用GUID。这可能是Azure上数据库导致所有这些问题的原因吗?

4 个答案:

答案 0 :(得分:2)

错误消息几乎描述了您的问题:

Warning SQL0: A project which specifies SQL Server 2012 as the target platform may
              experience compatibility issues with SQL Azure.
Error SQL72014: .Net SqlClient Data Provider: Msg 40511, Level 15, State 1, Line 2 
                Built-in function 'newsequentialid' is not supported in this version of SQL Server.

SQL Server和Azure SQL是not 100% feature compatible(即使差距已经很快缩小):

  

目前,Azure SQL数据库不支持SQL Server的所有功能。有关详细的比较信息,请参阅Azure SQL数据库指南和限制。要将现有数据库移动到Azure SQL数据库时要注意这一点,因为在重新设计数据库时可能需要一些额外的预算。

因此,您的问题是您使用了不受支持的功能newsequentialid

答案 1 :(得分:1)

上周晚些时候,Azure推出了最新版Azure SQL数据库的预览版,在该预览版中,现在支持NewSequentialID,以及之前没有的许多其他功能。

要使用最新版本创建数据库,请使用portal.azure.com处的新门户,并按照屏幕上的指导邀请您在创建新的Azure数据库时使用预览版。

答案 2 :(得分:0)

简短的回答是,如果您只需要一个独特的Guid,只需将所有newsequentialid()更改为newid()

这是一篇很好的参考博客文章Uniqueidentifier and Clustered Indexes,由Microsoft Azure团队发布。

在有关newsequentialid()的部分中,它描述了差异:

  

如果NEWID()函数生成唯一的非顺序   uniqueidentifier比NEWSEQUENTIALID()函数生成唯一   顺序uniqueidentifier。 NEWSEQUENTIALID()的唯一技巧   功能是根据网络生成部分GUID   计算机卡。

此外,甚至不推荐使用newsequentialid(),因为

  

(i)可以猜测下一个生成的GUID的值,   因此,访问与该GUID相关联的数据。

答案 3 :(得分:-1)

很难说没有任何代码会发生什么,但很可能你忘记将条目提交到你的表中。 SqlCommand.Dispose() before SqlTransaction.Commit()?可能会对您有所帮助。