簡體   English   中英

具有多個插入的存儲過程SQL和ASP.Net

[英]Stored Procedure with multiple inserts SQL and ASP.Net

我是寫存儲過程的新手。 我想在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列時出現錯誤。 我得到的錯誤是:

過程或函數spUser HAS指定的參數過多。

我認為問題是我的存儲過程。 但是我不知道如何在過程中指定更多插入。 我搜索了互聯網,但找不到答案。

有人知道我可以解決這個問題,使錯誤消失並且插入將起作用嗎?

提前致謝!

更新:

我在texboxes中使用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#代碼中有太多參數。 您的存儲過程僅需要3個參數

@userName VARCHAR(50),
@membershipnr INT,
@email VARCHAR(50)

因此,在C#中添加參數時,它們需要匹配(參數的數量,名稱和類型),即

 cmd.Parameters.AddWithValue("@userName", txtName.Text); cmd.Parameters.AddWithValue("@membershipnr", txtMembershipnr.Text); cmd.Parameters.AddWithValue("@email", txtEmail.Text); 

就我個人而言,我也喜歡使用以下類型來傳遞類型

 cmd.Parameters.Add("userName", SqlDbType.VarChar).Value = txtName.Text; cmd.Parameters.Add("membershipnr", SqlDbType.Int).Value = txtMembershipnr.Text; cmd.Parameters.Add("email", SqlDbType.VarChar).Value = txtEmail.Text; 

您在代碼中指定了太多參數(有些參數丟失,有些重復)。 您編寫該過程的方式將要求對要插入的每一行數據執行一次存儲的proc。

通常,這可以通過C#中的循環來實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM