【问题标题】:Getting a sql exception due to a fk constraint for unknown reasons由于未知原因,由于 fk 约束而出现 sql 异常
【发布时间】:2012-09-05 13:55:41
【问题描述】:

所以我得到的确切错误消息是:

INSERT 语句与 FOREIGN KEY 约束冲突 “FK_featuredtype_featured”。数据库发生冲突 “docphin”,表“dbo.featured”,列“featuredID”。该声明 已终止。”

我的VB代码中调用具有插入语句的sp的部分是:

If isChanged1.Checked Then
    lq.admin_RemoveFeatured(isChanged.featuredID1)
    lq.admin_AddFeatured(title1.Text, text1.Text, imageURL1.Text, login1.Checked, index1.Checked, mobile1.Checked, Integer.Parse(priority1.Text))

End If

If isChanged2.Checked Then
    lq.admin_RemoveFeatured(isChanged.featuredID2)
    lq.admin_AddFeatured(title2.Text, text2.Text, imageURL2.Text, login2.Checked, index2.Checked, mobile2.Checked, Integer.Parse(priority2.Text))

End If

现在奇怪的是,当我在 sql server 中执行 admin_AddFeatured 时它工作正常。

admin_RemoveFeatured:

CREATE PROCEDURE [dbo].[admin_RemoveFeatured] 
    -- Add the parameters for the stored procedure here
    @featuredID int
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    delete from featuredtype where featuredID= @featuredID
    delete from featured where featuredID= @featuredID


END

GO

admin_AddFeatured:

CREATE PROCEDURE [dbo].[admin_AddFeatured] 
    -- Add the parameters for the stored procedure here
    @title varchar(500) , 
    @text varchar(MAX),
    @imageURL varchar(200),
    @loginPage bit,
    @indexPage bit,
    @mobilePage bit,
    @priority int
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

         -- Insert statements for procedure here
        insert into featured
        (title,text,imageURL, priority )
        values
        (@title,@text,@imageURL, @priority)

        insert into featuredtype
        (loginPage, indexPage, mobilePage)
        values
        (@loginPage, @indexPage, @mobilePage)


END

GO

我一直在测试不同的解决方案,但我似乎无法真正理解这里可能出现的问题。我唯一的想法是 ic 可能与我如何获取我插入删除的每个“功能”项目的 ID 字段有关。为此我制作了一个模块:

Public Module isChanged
    Public featuredID1 As Integer
    Public featuredID2 As Integer
    Public featuredID3 As Integer
    Public featuredID4 As Integer
    Public featuredID5 As Integer
    Public featuredID6 As Integer
End Module

然后,在页面加载 sub 中,我使用 sp 并读取 ID,例如:

   Dim lq2 As New lqDFDataContext
        Dim var = lq2.admin_GetFeatured().ToList()
        Dim i As Integer = 1

        For Each f In var
            If i = 1 Then
                isChanged.featuredID1 = f.featuredID
                title1.Text = f.title
                text1.Text = f.text
                imageURL1.Text = f.imageURL
                login1.Checked = f.loginPage
                index1.Checked = f.indexPage
                mobile1.Checked = f.mobilePage
                priority1.Text = Str(f.priority)
            End If

etc...

【问题讨论】:

    标签: sql vb.net tsql stored-procedures


    【解决方案1】:

    您没有在featuredType 表中设置featuredID

    试试这个

       select @featuredID = Scope_Identity()
    
       insert into featuredtype 
            (loginPage, indexPage, mobilePage,featuredID) 
            values 
            (@loginPage, @indexPage, @mobilePage, @featuredID) 
    

    【讨论】:

    • 它摆脱了错误,但由于某种原因它根本没有更新数据库。值得一提的是,从 sp 获取 featuresID 的代码位于 pageload sub 中,而我显示的其他代码位于 sub 中,用于单击按钮。
    • 似乎新条目正在进入数据库,因为 id 正在改变,但其他值由于某种原因没有改变,即。标题、文本、优先级等...
    • 如果从 SQL Management Studio 运行 SP 会发生什么?是否插入记录?它会给出错误吗?
    • 找出问题所在。因此,当我的页面加载时,它会用数据库中的值填充文本框。然后我希望用户能够更改这些框中的值,然后他们选中一个框以将其标记为已更改。问题是当我将它插入到 db textbox.text 时仍然等于在页面加载子中加载到其中的值,而不是在那里输入的新值。有没有办法更新 textbox.text 我还需要更新复选框值。
    • 这是一个网络应用吗?听起来您在 Page_load 中填写回发文本框
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    相关资源
    最近更新 更多