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 实例添加参数,因此您最终会得到其中四个:、 和
@Nombreproceso@AnalistaID实际上 根本不需要这些 FormParameter 或(看起来)显式参数,除非您想要覆盖某些东西(比如类型),但这样就足够了。 此外,您可以在数据源的插入事件中中断并直接检查命令和参数。@Hallazgos@analista_id
<asp:Parameter ...

于 2012-07-09T04:26:13.373 回答
1

您的SelectCommand值应该不同,因为存储过程StoredProcedure1已设置为InsertCommand.

于 2012-07-09T02:31:06.190 回答
0

添加我对其他谷歌员工的评论:

如果您有不同的选择和插入参数,并且只想插入几个参数:

在 GridViews 中更简单,您只需将列设置为只读

对于 FormView,将文本标签从 bind() 更改为 eval()。

于 2017-05-16T09:07:32.907 回答