2011-05-08 127 views
3

我正在做一些功课。我的数据库的用户使用一些其他属性,而不仅仅是当我实现登录和注册机制时为我自动创建的那些属性。但是,当我尝试保存修改显示我一个错误。有人能帮我一把吗? 这是错误:为什么我不能添加新列到我的用户表?

enter image description here 错误说:

'aspnet_Users' table - Unable to modify table. ALTER TABLE only allows columns to be added that can contain nulls, or have a DEFAULT definition specified, or the column being added is an identity or timestamp column, or alternatively if none of the previous conditions are satisfied the table must be empty to allow addition of this column. Column 'kjoptekvoten' cannot be added to non-empty table 'aspnet_Users' because it does not satisfy these conditions.

,当我实现了基于认证和注册表格数据库自动创建。现在的问题是用户需要更多的属性。我怎么能给它更多的属性?最简单的方法是什么?不介意它是不是理论上正确的(这只是作业)。

我会很感激你的帮助。

+0

它特别重要,它是理论上正确的,因为它的功课:-) – 2011-05-09 00:52:49

回答

5

除了数据库方面的技术问题之外,这里还有一个更深层次的问题。

您不应该改变aspnet_Users表,因为您绕过了asp.net中成员资格'系统'的工作方式。相反,看看到档案机制:http://www.4guysfromrolla.com/articles/101106-1.aspx

+0

+1使用配置文件或其他存储取决于你想要做什么。尽管如此,不要与内部组件混合。 – 2011-05-08 22:55:36

3

您需要使新属性可以为空或提供默认值。但是你也需要考虑如何从db中获取值。 sql成员资格提供程序利用自动生成的存储过程将数据放入返回的成员资格用户实例中,因此仅添加表中的属性不足以将属性值获取到应用程序中。我会使用用户属性表。

+0

这不会渗透工作(我只是这样做)。查看更新后的图片。 您可以给我一些指导或技巧,如何能够创建用户属性表,并能够添加数据?请,我将不胜感激 – sfrj 2011-05-08 21:36:06

+2

您是否可以为空,或者您是否提供默认值? – recursive 2011-05-08 21:47:16

+0

我刚才说(复选框“允许空”没有选中),这意味着它可以为空。但是当我按下Ctrl + S来保存更改时,错误会弹出。我如何添加一个默认值到我无法创建的列? – sfrj 2011-05-09 07:33:19

2

错误消息说明了这一切:
您正在添加一个不能为空的新列(复选框“允许空”未选中),但由于您未提供默认值,它将为空。
因此,SQL Server无法创建新列。

你可以做两件事情:

a)创建并允许空值的新列。
然后把默认值在所有现有行:
update aspnet_Users set kjoptekvoten = 0)
......然后取消“允许空值”

二)直接使用默认值创建新列。
我不知道你是否能在Management Studio中做到这一点,但它在T-SQL很简单:

alter table aspnet_Users 
add kjoptekvoten int not null 
constraint Name_For_Constraint default(0) with values 

这将增加新的不空的列,并创建一个默认值的约束和填写所有现有行中的默认值(SQL Server不会在没有“with values”子句的情况下执行此操作)。

2

通常我刚才设置的列允许空值

然后做一个SQL更新表设定值= whateva

然后更新表定义不允许空值。

相关问题