1
CREATE TRIGGER copy_pk_into_fk_trigger
    AFTER insert ON tableA
    FOR EACH ROW
    BEGIN
      insert into tableB (tblA_ID) values (new.tblA_ID);
END$$

上記のトリガーを使用して、tableA から主キーの値をコピーし、外部キーとして tableB に挿入しています。しかし、その後、ASP.net の detailsView を使用して tableB のレコードを編集すると、外部キーの値が「NULL」になります。そして、これにより、親子間の接続がなくなります。助けてください。

[col: tblA_ID、tblA_val を持つ tableA と、
tblB_ID、tblA_ID、tblB_str
などを含む TableB]

4

2 に答える 2

0

これはあなたのトリガーとは関係がないと思います。トリガーは、挿入がトリガーされた後にのみ実行されるためです。detailsView で更新するためのクエリを表示できますか? updateステートメントについても言及していませんか?

于 2012-10-03T16:15:56.800 に答える
0

SqlDATASource と DetailsView の完全なソース コードは次のとおりです。

<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:HADIConnectionString %>" 
            DeleteCommand="DELETE FROM &quot;INDENT_FILE_NO&quot; WHERE &quot;FILE_NO_ID&quot; = :original_FILE_NO_ID AND ((&quot;INDENT_ID&quot; = :original_INDENT_ID) OR (&quot;INDENT_ID&quot; IS NULL AND :original_INDENT_ID IS NULL)) AND ((&quot;FILE_NO&quot; = :original_FILE_NO) OR (&quot;FILE_NO&quot; IS NULL AND :original_FILE_NO IS NULL)) AND ((&quot;FILE_DESCRIPTION&quot; = :original_FILE_DESCRIPTION) OR (&quot;FILE_DESCRIPTION&quot; IS NULL AND :original_FILE_DESCRIPTION IS NULL)) AND ((&quot;INDENTER&quot; = :original_INDENTER) OR (&quot;INDENTER&quot; IS NULL AND :original_INDENTER IS NULL))" InsertCommand="INSERT INTO &quot;INDENT_FILE_NO&quot; (&quot;FILE_NO_ID&quot;, &quot;INDENT_ID&quot;, &quot;FILE_NO&quot;, &quot;FILE_DESCRIPTION&quot;, &quot;INDENTER&quot;) VALUES (:FILE_NO_ID, :INDENT_ID, :FILE_NO, :FILE_DESCRIPTION, :INDENTER)" OldValuesParameterFormatString="original_{0}" ProviderName="<%$ ConnectionStrings:HADIConnectionString.ProviderName %>" 
            SelectCommand="SELECT * FROM &quot;INDENT_FILE_NO&quot; WHERE (&quot;INDENT_ID&quot; = :INDENT_ID)" 
            UpdateCommand="UPDATE &quot;INDENT_FILE_NO&quot; SET &quot;INDENT_ID&quot; = :INDENT_ID, &quot;FILE_NO&quot; = :FILE_NO, &quot;FILE_DESCRIPTION&quot; = :FILE_DESCRIPTION, &quot;INDENTER&quot; = :INDENTER WHERE &quot;FILE_NO_ID&quot; = :original_FILE_NO_ID AND ((&quot;INDENT_ID&quot; = :original_INDENT_ID) OR (&quot;INDENT_ID&quot; IS NULL AND :original_INDENT_ID IS NULL)) AND ((&quot;FILE_NO&quot; = :original_FILE_NO) OR (&quot;FILE_NO&quot; IS NULL AND :original_FILE_NO IS NULL)) AND ((&quot;FILE_DESCRIPTION&quot; = :original_FILE_DESCRIPTION) OR (&quot;FILE_DESCRIPTION&quot; IS NULL AND :original_FILE_DESCRIPTION IS NULL)) AND ((&quot;INDENTER&quot; = :original_INDENTER) OR (&quot;INDENTER&quot; IS NULL AND :original_INDENTER IS NULL))" ConflictDetection="CompareAllValues">

        <UpdateParameters>
            <asp:Parameter Name="INDENT_ID" Type="Decimal" />
            <asp:Parameter Name="FILE_NO" Type="String" />
            <asp:Parameter Name="FILE_DESCRIPTION" Type="String" />
            <asp:Parameter Name="INDENTER" Type="String" />
            <asp:Parameter Name="original_FILE_NO_ID" Type="Decimal" />
            <asp:Parameter Name="original_INDENT_ID" Type="Decimal" />
            <asp:Parameter Name="original_FILE_NO" Type="String" />
            <asp:Parameter Name="original_FILE_DESCRIPTION" Type="String" />
            <asp:Parameter Name="original_INDENTER" Type="String" />
        </UpdateParameters>

詳細ビュー:

<asp:DetailsView ID="DetailsView2" runat="server" AutoGenerateRows="False" DataKeyNames="FILE_NO_ID" DataSourceID="SqlDataSource2" Height="50px" Width="287px" >
                        <Fields>
                            <asp:BoundField DataField="FILE_NO_ID" HeaderText="FILE_NO_ID" ReadOnly="True"  SortExpression="FILE_NO_ID" Visible="False" />
                            <asp:BoundField DataField="INDENT_ID" HeaderText="INDENT_ID" SortExpression="INDENT_ID" Visible="False" />
                            <asp:BoundField DataField="FILE_NO" HeaderText="FILE_NO" SortExpression="FILE_NO" />
                            <asp:BoundField DataField="FILE_DESCRIPTION" HeaderText="FILE_DESCRIPTION" SortExpression="FILE_DESCRIPTION" />
                            <asp:BoundField DataField="INDENTER" HeaderText="INDENTER" SortExpression="INDENTER" />
                            <asp:CommandField ShowEditButton="True" ButtonType="Button" />
                        </Fields>
                    </asp:DetailsView>

しかし今、編集ボタンを押してフィールドを編集してから更新すると、そのフィールドのデータは同じままです。何もしないことを意味します。

于 2012-10-05T16:28:19.147 に答える