1

下部のソリューション。

レコードを更新しようとすると、次のエラーが発生します。

スカラー変数@PaymentTermIDを宣言する必要があります

問題は、@PaymentTermIDUpdateパラメータですでに定義されている必要があるということです。との2つの関数は、DropDownList: GridViewRow.DataItemプロパティonrowdatabound用にonrowupdateここにある関数の微調整バージョンです。削除は正常に機能します。

新しい行は追加されず、名前が変更されただけです。助けていただければ幸いです。私はaspオブジェクトの操作に正確に慣れていません。

<asp:GridView ID="GridView1" onrowdatabound="GridView1_RowDataBound" onrowupdating="GridView1_RowUpdating" runat="server" AutoGenerateColumns="False"   DataKeyNames="PaymentTermID" DataSourceID="SqlDataSource1" CellPadding="1"  CellSpacing="2">
    <Columns>
        <asp:CommandField ShowEditButton="True" />
        <asp:TemplateField HeaderText="Key Contract Date" SortExpression="Key Contract Date">
            <EditItemTemplate>
                <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource2" DataTextField="Key_Contract_Date" DataValueField="Key_Contract_Date" />
                <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:Production_DatabaseConnectionString %>" 
                            SelectCommand="SELECT DISTINCT [Key Contract Date] AS Key_Contract_Date FROM [tblPRJ_PaymentTerms]" />
            </EditItemTemplate>
            <ItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("[Key Contract Date]") %>' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Due Date" HeaderText="Due Date" SortExpression="Due Date" />
        <asp:BoundField DataField="Percent Due" HeaderText="Percent Due" SortExpression="Percent Due" />
        <asp:BoundField DataField="Custom Description" HeaderText="Custom Description" SortExpression="Custom Description" />
    </Columns>
    <HeaderStyle Font-Bold="True" ForeColor="#666666" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Production_DatabaseConnectionString %>" 
        SelectCommand="SELECT * FROM [tblPRJ_PaymentTerms] WHERE ([Job Number] = @Job_Number)" 
        DeleteCommand="DELETE FROM [tblPRJ_PaymentTerms] WHERE [PaymentTermID] = @PaymentTermID" 
        InsertCommand="INSERT INTO [tblPRJ_PaymentTerms] ([Job Number], [Key Contract Date], [Due Date], [Percent Due], [Custom Description]) VALUES (@Job_Number, @Key_Contract_Date, @Due_Date, @Percent_Due, @Custom_Description)" 
        UpdateCommand="UPDATE [tblPRJ_PaymentTerms] SET [Job Number] = @Job_Number, [Key Contract Date] = @Key_Contract_Date, [Due Date] = @Due_Date, [Percent Due] = @Percent_Due, [Custom Description] = @Custom_Description WHERE [PaymentTermID] = @PaymentTermID"> 
    <DeleteParameters>
        <asp:Parameter Name="PaymentTermID" Type="Int32" />
    </DeleteParameters>
    <InsertParameters>
        <asp:Parameter Name="Job_Number" Type="String" />
        <asp:Parameter Name="Key_Contract_Date" Type="String" />
        <asp:Parameter Name="Due_Date" Type="DateTime" />
        <asp:Parameter Name="Percent_Due" Type="Decimal" />
        <asp:Parameter Name="Custom_Description" Type="String" />
    </InsertParameters>
    <SelectParameters>
        <asp:ControlParameter ControlID="txtCurrentJobNumber" Name="Job_Number" PropertyName="Text" Type="String" />
    </SelectParameters>
    <UpdateParameters>
        <asp:Parameter Name="Job_Number" Type="String" />
        <asp:Parameter Name="Key_Contract_Date" Type="String" />
        <asp:Parameter Name="Due_Date" Type="DateTime" />
        <asp:Parameter Name="Percent_Due" Type="Decimal" />
        <asp:Parameter Name="Custom_Description" Type="String" />
        <asp:Parameter Name="PaymentTermID" Type="Int32" />
    </UpdateParameters>
</asp:SqlDataSource>

解決策:ここで複数の問題が発生しました。何よりもまず、GuthMDは、バウンドフィールド、テンプレートフィールド、またはその他のソース(コントロールパラメーターの場合はコントロールなど)のいずれかに関して参照が必要なパラメーターの評価において正しかった。asp:boundfieldPaymentTermIDのを作成し、Visibleプロパティをfalseに設定するだけで、私が投稿した問題が修正されました。

もう1つの問題は、データベースのセットアップが不十分で、列名にスペースが含まれていることでした。OLEDBドライバーはそれを嫌い、データベースに書き戻そうとしたときに列名にスペースがある場合(角かっこ[]で囲まれている場合でも)にエラーが発生します。SQLで名前を修正し、コードを再検討して、ほとんどのSQLコードを書き直した後、期待どおりに動作し始めました。

よろしくお願いします。

4

2 に答える 2

1

パラメータの使用に関するMSDNドキュメントを調べてきましたが、GridViewとの間でバインディングを作成するSqlDataSourceには、要素に対応する要素GridViewが必要になるようです。BoundFieldParameter

あなたのに以下を追加して<Columns>くださいGridView

<asp:BoundField DataField="Job_Number" Visible="false" />
<asp:BoundField DataField="Key_Contract_Date" Visible="false" />
<asp:BoundField DataField="Due_Date" Visible="false" />
<asp:BoundField DataField="Percent_Due" Visible="false" />
<asp:BoundField DataField="Custom_Description" Visible="false" />
<asp:BoundField DataField="PaymentTermID" Visible="false" />
于 2012-05-16T17:19:16.010 に答える