c# - 具有多次插入的存储过程 SQL 和 ASP.Net

标签 c# asp.net sql-server stored-procedures

我是编写存储过程的新手。我想在 SQL Server 中编写一个存储过程,以便从 ASP.net 中的表中进行多次插入。

这是我到目前为止所拥有的:

存储过程:

ALTER procedure [dbo].[spUser]
    @userName VARCHAR(50),
    @membershipnr INT,
    @email VARCHAR(50)
as
begin
    DECLARE @returnvalue INT

    IF (SELECT COUNT(*) FROM User WHERE Membershipnr = @membershipnr) > 0
    BEGIN
        SET @returnvalue = -1
    END
    ELSE
    BEGIN
        SET @returnvalue = 1

        INSERT INTO User(Name, Membershipnr, Email) 
        VALUES(@userName, @membershipnr, @email)
    END

    SELECT @returnvalue
end

C# 代码:

SqlCommand cmd = new SqlCommand("spUser", conn);
cmd.CommandType = CommandType.StoredProcedure;

SqlCommand com = new SqlCommand("spTeam", conn);
com.CommandType = CommandType.StoredProcedure;

if (ddl1.SelectedValue == "2" && rb.SelectedValue == "M" && ddl2.SelectedValue == "1")
{
    cmd.Parameters.AddWithValue("@userName", txtName.Text);
    cmd.Parameters.AddWithValue("@userName", txtName2.Text);
    cmd.Parameters.AddWithValue("@membershipnr", txtMembershipnr.Text);
    cmd.Parameters.AddWithValue("@membershipnr", txtMembershipnr2.Text);
    cmd.Parameters.AddWithValue("@email", txtEmail.Text);
    cmd.Parameters.AddWithValue("@email", txtEmail2.Text);
    com.Parameters.AddWithValue("@clubID", "1");
    com.Parameters.AddWithValue("@class", "2xM");
    com.Parameters.AddWithValue("@teamName", txtTeam.Text);

    conn.Open();
    int answer = (int)cmd.ExecuteNonQuery();

}

当我尝试插入 2 列时出现错误。我得到的错误是:

Procedure or function spUser HAS too many arguments specified.

我认为问题出在我的存储过程上。但我不知道如何在过程中指定更多插入。我在网上搜索但找不到答案。

有人知道如何解决这个问题,以便错误消失并且我的插入可以工作吗?

提前致谢!

更新:

我正在使用带有文本框的 3 表。

其中一张表:

<asp:Table ID="tblTwo" runat="server" class="table">
    <asp:TableHeaderRow>
        <asp:TableHeaderCell>Name</asp:TableHeaderCell>
        <asp:TableHeaderCell>Email</asp:TableHeaderCell>
        <asp:TableHeaderCell>Membershipnr</asp:TableHeaderCell>
    </asp:TableHeaderRow>

    <asp:TableRow>
        <asp:TableCell>
            <asp:TextBox ID="txtName" type="text" class="form-control" runat="server"></asp:TextBox>
        </asp:TableCell>
        <asp:TableCell>
            <asp:TextBox ID="txtEmail" type="text" class="form-control" runat="server"></asp:TextBox>
        </asp:TableCell>
        <asp:TableCell>
            <asp:TextBox ID="txtMembershipnr" type="text" class="form-control" runat="server"></asp:TextBox>
        </asp:TableCell>
    </asp:TableRow>
    <asp:TableRow>
        <asp:TableCell>
            <asp:TextBox ID="txtName2" type="text" class="form-control" runat="server"></asp:TextBox>
        </asp:TableCell>
        <asp:TableCell>
            <asp:TextBox ID="txtEmail2" type="text" class="form-control" runat="server"></asp:TextBox>
        </asp:TableCell>
        <asp:TableCell>
            <asp:TextBox ID="txtMembershipnr2" type="text" class="form-control" runat="server"></asp:TextBox>
        </asp:TableCell>
    </asp:TableRow>
</asp:Table>

此外,我还有一个用于 CulbIDClassTeam 的存储过程,因为必须将其填充到另一个 SQL Server 表中。

该存储过程的代码:

ALTER procedure [dbo].[spTeam]
    @teamName VARCHAR (50)
as
BEGIN
    INSERT INTO Ploeg(Name, RegistrationDate)
    VALUES(@teamName, GETDATE())
END

最佳答案

您的存储过程的输入变量数量少于您从 C# 代码发送的输入变量数量。您需要在存储过程中定义它们。

尝试添加您从代码发送的所有输入变量,如下所示:

ALTER procedure [dbo].[spUser]
@userName VARCHAR(50),
@membershipnr INT,
@email VARCHAR(50)
@clubID int,
@class varchar(5),
@teamname varchar(15),
.............

关于c# - 具有多次插入的存储过程 SQL 和 ASP.Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29701886/

相关文章:

c# - 尝试将外部网页加载到框架/对话框中

sql-server - 释放对执行流程任务中使用的变量的锁定 | SSIS

sql-server - 我希望在使用数据透视表和动态列名称的查询中使用 0 而不是空值

c# - 填充列表的通用方法无法创建 T()

c# - 识别 IEnumerable 是否已排序的方法

asp.net - 通过SQL Server SP在aspnet成员中添加用户并分配角色

c# - 解析和插入批量数据。如何保持业绩和做关系?

c# - 存储设置 : XML vs. SQLite?

c# - 使用字符串数组动态填充功能区设计组合框?

c# - Bitmap.Save "Exception (0x80004005): A generic error occurred in GDI+."上的 ASP.NET 错误