2011-01-09 18 views
0

编辑
看来用户必须输入他的个人资料的一些数据,否则我会得到下面的错误。我猜如果没有配置文件数据,用户默认不能继续在其他表中输入数据?我不想让输入的用户配置文件数据成为使用其余网站功能的要求,我该如何解决这个问题?为什么用户必须输入“Profile”数据才能将数据输入到其他表格中?

EDIT 2
OK,我会尝试:​​然而,我的表没有一个外键列....?

(注释 - Ref1Ref2

原题:


目前我一直在测试都使用相同的用户和一切都已经正常工作。

但是,当我第一次创建一个新用户并试图输入数据到我的自定义表中时,出现以下错误。

不知道为什么我得到这个错误。我有ASP.NET 3.5中设置的用户控件,但是我使用的是我自己的表或者至少我知道的。

我有一个自定义UserData表,其中包括列:

id, UserProfileID, CL, LL, SL, DateTime 

(id是自动递增INT)的目的是使所有用户都将在此表中添加自己的数据和我上面提到的有一直在为我创建的原始第一个用户正常工作。但是,当我创建一个新用户时,我遇到了这个问题。

以下是更新数据库的代码。

protected void Button1_Click(object sender, EventArgs e) 
    { 

     //connect to database 
     MySqlConnection database = new MySqlConnection(); 
     database.CreateConn(); 

     //create command object 
     Command = new SqlCommand(queryString, database.Connection); 

     //add parameters. used to prevent sql injection 
     Command.Parameters.Add("@UID", SqlDbType.UniqueIdentifier); 
     Command.Parameters["@UID"].Value = Membership.GetUser().ProviderUserKey; 

     Command.Parameters.Add("@CL", SqlDbType.Int); 
     Command.Parameters["@CL"].Value = InCL.Text; 

     Command.Parameters.Add("@LL", SqlDbType.Int); 
     Command.Parameters["@LL"].Value = InLL.Text; 

     Command.Parameters.Add("@SL", SqlDbType.Int); 
     Command.Parameters["@SL"].Value = InSL.Text; 

     Command.ExecuteNonQuery(); 
    } 

源错误:

Line 84:
Command.ExecuteNonQuery();

回答

1

听起来就像在UserData和Profile表之间有一个外键约束。如果asp_Profile中没有记录的用户标识值等于UserData表中新记录中的UserProfileID,则会出现此错误。不知道你的目标是什么,但听起来你应该删除FK_UserData_aspnet_Profile约束,然后使UserData.UserProfileID为空,因为在你的UserData表中不会有与之对应的配置文件中的记录。

+0

任何线索如何摆脱FK_UserData_aspnet_Profile约束? – 2011-01-20 20:00:23

1

制作UserProfileID可空,并通过为DBNull到UID参数,如果用户没有输入数据。

+0

达维塔,我想我明白了第二部分,但如何使“UserProfileID”为空的帮助呢?对于数据,只要输入数据,我总是需要输入“UserProfileID”。 – 2011-01-09 01:27:48

1

这意味着您试图输入到UserProfileID列的值不存在于UserID列中的Profile表的任何行中。

也许ProviderUserKey不是你应该在这里使用的。

0

这照顾了它 -

ALTER TABLE UserData 
    DROP CONSTRAINT FK_UserData_aspnet_Profile; 
相关问题