【问题标题】:Visual Studio: Updating 2 tables using a grid viewVisual Studio:使用网格视图更新 2 个表
【发布时间】:2019-03-16 00:26:51
【问题描述】:

我想要一个包含Members.firstNameMembers.LastNameTeam.TeamName 的网格视图。 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))

【问题讨论】:

  • 有什么更新吗?你有没有尝试过?
  • 我添加了 original_TeamId 、 original_FirstName 、 original_LastName 、 original_TeamName 但随后出现错误:“过程或函数 'updateTeamMembers' 需要参数 'original_TeamId',但未提供。”我试着在网上找到一个教程,这样我就可以一步一步地跟着那个教程走,但没有运气。

标签: sql-server visual-studio gridview dropdown


【解决方案1】:

当您执行存储过程时,您指定参数以逗号分隔,如下所示:

EXEC updateTeamMembers @ParamValue1, @ParamValue2, @ParamValue3, @ParamValue4, @ParamValue5...

首先,最好将参数指定为键值对,其中键是存储过程参数名称,值是您要传递给该参数的值。因此,上面的查询将如下所示:

EXEC updateTeamMembers
   @TeamId = @ParamValue1,
   @FirstName = @ParamValue2,
   @LastName = @ParamValue3,
   @TeamName = @ParamValue4

如果你这样做,会发现你没有第五个参数。

为了帮助你更多,你应该从 VS 粘贴代码。

【讨论】:

  • 您好 Nişu,感谢您的回复,我现在添加了我的 HTML。我明白你在说什么,但我从不执行我的过程,只需在配置数据源时单击存储过程。
  • 我认为当存储过程被asp.net调用时,它也是使用原始参数调用的,即除了您已经声明的四个参数(TeamId,FirstName,LastName,TeamName)之外,框架通过参数 original_TeamId、original_FirstName、original_LastName 和 original_TeamName。尝试将这 4 个添加到存储过程定义中。这只是一种预感。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 1970-01-01
  • 2020-02-27
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多