修改
用户必须为其个人资料输入一些数据,否则我会在下面收到此错误消息。我想如果没有配置文件数据,用户默认情况下无法继续在其他表中输入数据?我不想将输入用户个人资料数据作为使用其他网站功能的要求,我该如何解决这个问题呢?
编辑2
好的我会尝试:To DROP a FOREIGN KEY Constraint 但是,我的表没有外键列....?
原始问题:
目前,我一直在使用相同的用户测试所有内容,而且一切正常。
但是,当我第一次创建新用户并尝试输入数据到我的自定义表中时,我收到以下错误。
INSERT语句与之冲突 FOREIGN KEY约束 “FK_UserData_aspnet_Profile”。该 数据库中发生冲突 “C:\即将状态置\ APP_DATA \ ASPNETDB.MDF” 表“dbo.aspnet_Profile”,列 '用户身份'。声明一直如此 终止。
不确定我为什么会收到此错误。我在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();
}
来源错误:
第84行:
Command.ExecuteNonQuery();
答案 0 :(得分:1)
如果用户没有输入数据,则使UserProfileID可为空并将DBNull传递给UID参数。
答案 1 :(得分:1)
这意味着您尝试输入UserProfileID
列的值在Profile
列的UserID
表格的任何行中都不存在。
也许ProviderUserKey不是你应该在这里使用的。
答案 2 :(得分:1)
听起来你在UserData和Profile表之间有一个外键约束。如果asp_Profile中没有记录,其UserID值等于UserData表中新记录中的UserProfileID,则会出现此错误。不确定你的目标是什么,但听起来你应该删除FK_UserData_aspnet_Profile约束,然后使UserData.UserProfileID可以为空,因为在与UserData表对应的配置文件中不会总是有记录。
答案 3 :(得分:0)
这照顾它 -
ALTER TABLE UserData
DROP CONSTRAINT FK_UserData_aspnet_Profile;