2

アプリ内のハードコードされたすべてのSQLステートメントをストアドプロシージャに変更する作業を行っています。しかし、それを実行すると、「プロシージャまたは関数StoredProcedure1に指定された引数が多すぎます」というエラーが表示されます。これが私のSPです:

    ALTER PROCEDURE dbo.StoredProcedure1

        (
        @Nombreproceso varchar(MAX),
        @AnalistaID int,
        @Hallazgos varchar(MAX)
        )

    AS
        insert into proceso (nombreProceso,analista_id,hallazgos) values (@Nombreproceso,@AnalistaID,@Hallazgos)

これが私のデータソースです:

 <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
             ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
             InsertCommand="StoredProcedure1" InsertCommandType="StoredProcedure" 
             SelectCommand="StoredProcedure1" SelectCommandType="StoredProcedure">
             <InsertParameters>
                  <asp:FormParameter DefaultValue="a" FormField="nombreProcesoTextBox" 
                     Name="Nombreproceso" Type="String" />
                 <asp:FormParameter DefaultValue="1" FormField="analista_idTextBox" 
                     Name="AnalistaID" Type="Int32" />
                 <asp:FormParameter DefaultValue="aa" FormField="hallazgosTextBox" 
                     Name="Hallazgos" Type="String" />
             </InsertParameters>
             <SelectParameters>
                 <asp:FormParameter DefaultValue="a" FormField="nombreProcesoTextBox" 
                     Name="Nombreproceso" Type="String" />
                 <asp:FormParameter DefaultValue="1" FormField="analista_idTextBox" 
                     Name="AnalistaID" Type="Int32" />
                 <asp:FormParameter DefaultValue="aa" FormField="hallazgosTextBox" 
                     Name="Hallazgos" Type="String" />
             </SelectParameters>
         </asp:SqlDataSource>

そしてここにフォームがあります:

 <asp:FormView ID="FormView_Proceso" runat="server" DataKeyNames="id"
    DataSourceID="SqlDataSource1" DefaultMode="Insert" >
            <InsertItemTemplate>
                nombreProceso:
                <asp:TextBox ID="nombreProcesoTextBox" runat="server" 
                    Text='<%# Bind("nombreProceso") %>' />
                analista_id:
                <asp:TextBox ID="analista_idTextBox" runat="server" 
                    Text='<%# Bind("analista_id") %>' />
                hallazgos:
                <asp:TextBox ID="hallazgosTextBox" runat="server" 
                    Text='<%# Bind("hallazgos") %>' />
                <asp:Button ID="InsertButton" runat="server" CausesValidation="True" 
                    CommandName="Insert" Text="Insert" />
                &nbsp;<asp:Button ID="InsertCancelButton" runat="server" 
                    CausesValidation="False" CommandName="Cancel" Text="Cancel" />
            </InsertItemTemplate>
        </asp:FormView>

何が悪いのかわからない。どんな助けでも大歓迎です。

4

3 に答える 3

2

FormView(およびその他のコントロール)は、すべてのBindインスタンスにパラメーターを暗黙的に追加しようとするため、最終的には、、、の4つに
@Nombreprocesoなります。必要な場合を除いて@AnalistaID、 これらのFormParameterまたは(見た目は)明示的なパラメーターは実際には必要ありません。何か(タイプなど)をオーバーライドしますが、それで十分です。 また、データソースのInsertingイベントの内部に侵入し、コマンドとパラメーターを直接確認することもできます。@Hallazgos@analista_id
<asp:Parameter ...

于 2012-07-09T04:26:13.373 に答える
1

ストアドプロシージャはすでにに設定されているSelectCommandため、値は異なるはずです。StoredProcedure1InsertCommand

于 2012-07-09T02:31:06.190 に答える
0

他のグーグルへの私のコメントの追加:

選択と挿入に異なるパラメーターがあり、いくつかのパラメーターのみを挿入したい場合:

GridViewsの方が簡単で、列を読み取り専用に設定するだけです

FormViewの場合、テキストラベルをbind()からeval()に変更します。

于 2017-05-16T09:07:32.907 に答える