为什么用户必须输入“配置文件”数据才能将数据输入其他表?

时间:2011-01-09 01:08:55

标签: c# sql sql-server foreign-keys

修改
用户必须为其个人资料输入一些数据,否则我会在下面收到此错误消息。我想如果没有配置文件数据,用户默认情况下无法继续在其他表中输入数据?我不想将输入用户个人资料数据作为使用其他网站功能的要求,我该如何解决这个问题呢?

编辑2
好的我会尝试:To DROP a FOREIGN KEY Constraint 但是,我的表没有外键列....?

(注意 - Ref1Ref2

原始问题:


目前,我一直在使用相同的用户测试所有内容,而且一切正常。

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

  

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

4 个答案:

答案 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;