我想要一个包含Members.firstName
,Members.LastName
,Team.TeamName
的gridview。 Team.TeamName
应该是一个包含可能的TeamName的下拉列表。
我的表:
Members
--------
MemberID BIGINT
FirstName NVARCHAR(50)
LastName NVARCHAR(50)
TeamID BIGINT
Team
---------
TeamID BIGINT
TeamName NVARCHAR(50)
我的选择:
SELECT Members.FirstName, Members.LastName, Team.TeamName
FROM Members
INNER JOIN Team ON Members.TeamId = Team.TeamId
我的更新:
CREATE PROCEDURE updateTeamMembers
(
@TeamId BIGINT,
@FirstName NVARCHAR(50),
@LastName NVARCHAR(50),
@TeamName NVARCHAR(50)
)
AS
BEGIN
UPDATE Members SET FirstName=@FirstName, LastName=@LastName WHERE TeamId=@TeamId
UPDATE Team SET TeamName=@TeamName WHERE TeamId=@TeamId
END
RETURN
我相信更新程序的错误,我得到这个错误:
过程或函数updateTeamMembers指定了太多参数。
我的HTML5:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConflictDetection="CompareAllValues" ConnectionString="<%$ ConnectionStrings:RegistrationConnectionString %>" DeleteCommand="DELETE FROM [Members] WHERE [MemberId] = @original_MemberId AND (([FirstName] = @original_FirstName) OR ([FirstName] IS NULL AND @original_FirstName IS NULL)) AND (([LastName] = @original_LastName) OR ([LastName] IS NULL AND @original_LastName IS NULL)) AND (([TeamId] = @original_TeamId) OR ([TeamId] IS NULL AND @original_TeamId IS NULL))" InsertCommand="INSERT INTO [Members] ([FirstName], [LastName], [TeamId]) VALUES (@FirstName, @LastName, @TeamId)" OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT Members.FirstName, Members.LastName, Team.TeamName FROM Members INNER JOIN Team ON Members.TeamId = Team.TeamId" UpdateCommand="updateTeamMembers" UpdateCommandType="StoredProcedure">
<DeleteParameters>
<asp:Parameter Name="original_MemberId" Type="Int32" />
<asp:Parameter Name="original_FirstName" Type="String" />
<asp:Parameter Name="original_LastName" Type="String" />
<asp:Parameter Name="original_TeamId" Type="Int64" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="FirstName" Type="String" />
<asp:Parameter Name="LastName" Type="String" />
<asp:Parameter Name="TeamId" Type="Int64" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="TeamId" Type="Int64" />
<asp:Parameter Name="FirstName" Type="String" />
<asp:Parameter Name="LastName" Type="String" />
<asp:Parameter Name="TeamName" Type="String" />
</UpdateParameters>
</asp:SqlDataSource>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3" DataSourceID="SqlDataSource1" Height="217px" Width="596px">
<Columns>
<asp:BoundField DataField="FirstName" HeaderText="First Name" SortExpression="FirstName" />
<asp:BoundField DataField="LastName" HeaderText="Last Name" SortExpression="LastName" />
<asp:BoundField DataField="TeamName" HeaderText="Team Name" SortExpression="TeamName" />
<asp:CommandField ShowEditButton="True" />
</Columns>
通过数据源配置时更新命令(不更新):
UPDATE [Members] SET [FirstName] = @FirstName, [LastName] = @LastName, [TeamId] = @TeamId WHERE [MemberId] = @original_MemberId AND (([FirstName] = @original_FirstName) OR ([FirstName] IS NULL AND @original_FirstName IS NULL)) AND (([LastName] = @original_LastName) OR ([LastName] IS NULL AND @original_LastName IS NULL)) AND (([TeamId] = @original_TeamId) OR ([TeamId] IS NULL AND @original_TeamId IS NULL))
执行存储过程时,指定以逗号分隔的参数,如下所示:
EXEC updateTeamMembers @ParamValue1, @ParamValue2, @ParamValue3, @ParamValue4, @ParamValue5...
首先,将参数指定为键值对是一个好习惯,其中键是存储过程参数名称,值是您要传递给该参数的值。所以,上面的查询将如下所示:
EXEC updateTeamMembers
@TeamId = @ParamValue1,
@FirstName = @ParamValue2,
@LastName = @ParamValue3,
@TeamName = @ParamValue4
如果这样做,将会发现您没有第五个参数。
为了帮助您,您应该从VS粘贴代码。