[英]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>
另外,我還有第二個針對CulbID
, Class
和Team
存儲過程,因為必須將其存儲到另一個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.