Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 当我试图从数据库中删除一行时,出现参数过多错误_Asp.net_Sql Server_Vb.net_Tsql - Fatal编程技术网

Asp.net 当我试图从数据库中删除一行时,出现参数过多错误

Asp.net 当我试图从数据库中删除一行时,出现参数过多错误,asp.net,sql-server,vb.net,tsql,Asp.net,Sql Server,Vb.net,Tsql,我用简单的存储过程创建了一个数据库,用于删除、插入、选择和更新数据库三个表中的记录。除了我的delete语句,它们都可以工作。当我尝试时,我收到一条过程或函数有太多参数的消息。我尝试删除它拥有的一个参数,结果删除了表中的所有记录,而不是我的目标记录。我做错了什么?我感觉我的SQL脚本中有错误,但我不知道我可以做些什么来让它正常工作 消息: CREATE PROCEDURE [Delete_Special] @ThisID INT AS DELETE FROM [Daily_Spe

我用简单的存储过程创建了一个数据库,用于删除、插入、选择和更新数据库三个表中的记录。除了我的delete语句,它们都可以工作。当我尝试时,我收到一条
过程或函数有太多参数的消息。我尝试删除它拥有的一个参数,结果删除了表中的所有记录,而不是我的目标记录。我做错了什么?我感觉我的SQL脚本中有错误,但我不知道我可以做些什么来让它正常工作

消息:

CREATE PROCEDURE [Delete_Special]
    @ThisID INT
AS
    DELETE FROM [Daily_Specials]
    WHERE @ThisID = [ID]
GO
Protected Sub BTN_DeleteEvt_Click(sender As Object, e As EventArgs)
    SQL_Specials.Delete()
End Sub
<asp:SqlDataSource ID="SQL_Specials" runat="server" DeleteCommand="Delete_Special" DeleteCommandType="StoredProcedure">
    <DeleteParameters>
        <asp:ControlParameter ControlID="GV_Eagles_Specials" Name="ThisID" PropertyName="SelectedIndex"
            Type="Int32" />
    </DeleteParameters>
</asp:SqlDataSource>
<asp:GridView ID="GV_Eagles_Specials" runat="server" DataSourceID="SQL_Specials" AutoGenerateColumns="False">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="BTN_EditSpecial" runat="server" CssClass="BigText" Text="Edit" OnClick="BTN_EditEvent_Click" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" HtmlEncode="False" DataFormatString="{0:MM/dd/yyyy}" />
        <asp:BoundField DataField="Special" HeaderText="Special" SortExpression="Special" HtmlEncode="False" />
        <asp:BoundField DataField="Side" HeaderText="Side" SortExpression="Side" HtmlEncode="False" />
        <asp:BoundField DataField="Special_Price" HeaderText="Special Price" SortExpression="Special_Price" HtmlEncode="False" />
        <asp:BoundField DataField="Soup" HeaderText="Soup" SortExpression="Soup" HtmlEncode="False" />
        <asp:BoundField DataField="Soup_Price" HeaderText="Soup Price" SortExpression="Soup_Price" HtmlEncode="False" />
        <asp:TemplateField ShowHeader="False">
            <ItemTemplate>
                <asp:Button ID="BTN_DeleteEvt" runat="server" CausesValidation="False" CommandName="Delete" Text="Delete" CssClass="BigText" OnClick="BTN_DeleteEvt_Click" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
过程或函数Delete_Special指定的参数太多

我的SQL脚本:

CREATE PROCEDURE [Delete_Special]
    @ThisID INT
AS
    DELETE FROM [Daily_Specials]
    WHERE @ThisID = [ID]
GO
Protected Sub BTN_DeleteEvt_Click(sender As Object, e As EventArgs)
    SQL_Specials.Delete()
End Sub
<asp:SqlDataSource ID="SQL_Specials" runat="server" DeleteCommand="Delete_Special" DeleteCommandType="StoredProcedure">
    <DeleteParameters>
        <asp:ControlParameter ControlID="GV_Eagles_Specials" Name="ThisID" PropertyName="SelectedIndex"
            Type="Int32" />
    </DeleteParameters>
</asp:SqlDataSource>
<asp:GridView ID="GV_Eagles_Specials" runat="server" DataSourceID="SQL_Specials" AutoGenerateColumns="False">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="BTN_EditSpecial" runat="server" CssClass="BigText" Text="Edit" OnClick="BTN_EditEvent_Click" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" HtmlEncode="False" DataFormatString="{0:MM/dd/yyyy}" />
        <asp:BoundField DataField="Special" HeaderText="Special" SortExpression="Special" HtmlEncode="False" />
        <asp:BoundField DataField="Side" HeaderText="Side" SortExpression="Side" HtmlEncode="False" />
        <asp:BoundField DataField="Special_Price" HeaderText="Special Price" SortExpression="Special_Price" HtmlEncode="False" />
        <asp:BoundField DataField="Soup" HeaderText="Soup" SortExpression="Soup" HtmlEncode="False" />
        <asp:BoundField DataField="Soup_Price" HeaderText="Soup Price" SortExpression="Soup_Price" HtmlEncode="False" />
        <asp:TemplateField ShowHeader="False">
            <ItemTemplate>
                <asp:Button ID="BTN_DeleteEvt" runat="server" CausesValidation="False" CommandName="Delete" Text="Delete" CssClass="BigText" OnClick="BTN_DeleteEvt_Click" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
调用存储过程的事件:

CREATE PROCEDURE [Delete_Special]
    @ThisID INT
AS
    DELETE FROM [Daily_Specials]
    WHERE @ThisID = [ID]
GO
Protected Sub BTN_DeleteEvt_Click(sender As Object, e As EventArgs)
    SQL_Specials.Delete()
End Sub
<asp:SqlDataSource ID="SQL_Specials" runat="server" DeleteCommand="Delete_Special" DeleteCommandType="StoredProcedure">
    <DeleteParameters>
        <asp:ControlParameter ControlID="GV_Eagles_Specials" Name="ThisID" PropertyName="SelectedIndex"
            Type="Int32" />
    </DeleteParameters>
</asp:SqlDataSource>
<asp:GridView ID="GV_Eagles_Specials" runat="server" DataSourceID="SQL_Specials" AutoGenerateColumns="False">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="BTN_EditSpecial" runat="server" CssClass="BigText" Text="Edit" OnClick="BTN_EditEvent_Click" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" HtmlEncode="False" DataFormatString="{0:MM/dd/yyyy}" />
        <asp:BoundField DataField="Special" HeaderText="Special" SortExpression="Special" HtmlEncode="False" />
        <asp:BoundField DataField="Side" HeaderText="Side" SortExpression="Side" HtmlEncode="False" />
        <asp:BoundField DataField="Special_Price" HeaderText="Special Price" SortExpression="Special_Price" HtmlEncode="False" />
        <asp:BoundField DataField="Soup" HeaderText="Soup" SortExpression="Soup" HtmlEncode="False" />
        <asp:BoundField DataField="Soup_Price" HeaderText="Soup Price" SortExpression="Soup_Price" HtmlEncode="False" />
        <asp:TemplateField ShowHeader="False">
            <ItemTemplate>
                <asp:Button ID="BTN_DeleteEvt" runat="server" CausesValidation="False" CommandName="Delete" Text="Delete" CssClass="BigText" OnClick="BTN_DeleteEvt_Click" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
节略标记:

CREATE PROCEDURE [Delete_Special]
    @ThisID INT
AS
    DELETE FROM [Daily_Specials]
    WHERE @ThisID = [ID]
GO
Protected Sub BTN_DeleteEvt_Click(sender As Object, e As EventArgs)
    SQL_Specials.Delete()
End Sub
<asp:SqlDataSource ID="SQL_Specials" runat="server" DeleteCommand="Delete_Special" DeleteCommandType="StoredProcedure">
    <DeleteParameters>
        <asp:ControlParameter ControlID="GV_Eagles_Specials" Name="ThisID" PropertyName="SelectedIndex"
            Type="Int32" />
    </DeleteParameters>
</asp:SqlDataSource>
<asp:GridView ID="GV_Eagles_Specials" runat="server" DataSourceID="SQL_Specials" AutoGenerateColumns="False">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="BTN_EditSpecial" runat="server" CssClass="BigText" Text="Edit" OnClick="BTN_EditEvent_Click" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" HtmlEncode="False" DataFormatString="{0:MM/dd/yyyy}" />
        <asp:BoundField DataField="Special" HeaderText="Special" SortExpression="Special" HtmlEncode="False" />
        <asp:BoundField DataField="Side" HeaderText="Side" SortExpression="Side" HtmlEncode="False" />
        <asp:BoundField DataField="Special_Price" HeaderText="Special Price" SortExpression="Special_Price" HtmlEncode="False" />
        <asp:BoundField DataField="Soup" HeaderText="Soup" SortExpression="Soup" HtmlEncode="False" />
        <asp:BoundField DataField="Soup_Price" HeaderText="Soup Price" SortExpression="Soup_Price" HtmlEncode="False" />
        <asp:TemplateField ShowHeader="False">
            <ItemTemplate>
                <asp:Button ID="BTN_DeleteEvt" runat="server" CausesValidation="False" CommandName="Delete" Text="Delete" CssClass="BigText" OnClick="BTN_DeleteEvt_Click" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

您的查询接受一个输入参数(
ThisID
),但您不使用它调用查询


您需要指定要删除哪个
ThisID
,并且需要将它从GridView的项解析到删除函数中。

我认为您的Where语句是反向的

CREATE PROCEDURE [Delete_Special]
    @ThisID INT
AS
    DELETE FROM [Daily_Specials]
    WHERE @ThisID = [ID]
GO
我想你可能想要这样

CREATE PROCEDURE [Delete_Special]
    @ThisID INT
AS
    DELETE FROM [Daily_Specials]
    WHERE [ID] = @ThisID
GO
参数是要在Where语句中匹配的参数


您希望删除ID列与参数
@ThisID
匹配的所有记录。

看来问题不在于SQL Server。我正在浏览MSDN以了解此问题,并且

在答复中:

因此,我正在对存储的进程进行反复研究,因为它看起来像是从那里产生的错误。我注意到的一件有趣的事情是,存储过程在SQL查询分析器中运行良好,并返回自动生成的行号。然而,当从VisualStudio中运行时,我得到了相同的@Identity错误,存储的过程既不添加表行,也不返回行号

我借了一本Robert Vieira的专业SQL Server 2000编程。很好,罗伯托在第367页上说:

“调用存储过程时必须使用OUTPUT关键字,就像声明存储过程时一样。这会提前向SQL Server发出有关该参数将需要的特殊处理的警告。但是,请注意,忘记包含OUTPUT关键字不会创建运行时错误,但是OUTPUT参数的值不会被移动到变量中(您只会得到已经存在的值-很可能是空值)。。。"

由于这听起来很像我遇到的@Identity错误,我仔细查看了存储过程中的@Identity定义,假设有什么东西没有事先让SQL Server知道存储过程有一个输出返回值。运行存储过程时弹出的变量初始化对话框一个下拉框,用于初始化@Identity的值,因为它是一个输出变量,所以看起来很奇怪。两个选项是
(下拉列表中的默认设置)和

我在对话框中将
更改为
,并运行存储的过程,这更多的是因为我没有想法,而不是任何理性思维过程


你能发布Delete()方法的主体吗?我想这就是你为SP调用分配输入参数的地方……我切换了参数和列名,但结果是一样的。你读了@Phrancis的答案了吗?我不确定它的确切含义,因为我没有编写你的代码或查看他链接的答案。