UserProfile.aspx
이라는 웹 폼이 있습니다. 사용자가 로그인 한 후에는 UserProfile에서 세부 정보를보고 편집 할 수 있습니다. SqlDataSource
을 사용하고 데이터를 DetailsView
에 바인딩했습니다. 상세 뷰에서 3 개의 테이블에서 데이터를 검색하고 선택 쿼리가 올바르게 작동하고 데이터를 성공적으로 표시 할 수 있습니다. 내가 정보를 업데이트하고 DetailsView
에 Update
버튼을 쳤을 때업데이트 문에 스칼라 변수 "@UserId"를 선언해야합니다.
그러나이 오류가 나타납니다
예외 정보 : System.Data.SqlClient.SqlException :
는 스칼라 변수 "를 선언해야합니다 @ 사용자 ID ".<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ASPNETDBConnectionString1 %>" SelectCommand="SELECT aspnet_Membership.Email, Details.CustName, Details.CustNum, Details.CustRole, Details.CustStatus, Details.PName, Details.PEmail, Details.PRole, Details.WedDate, aspnet_Users.UserName FROM Details INNER JOIN aspnet_Membership ON Details.UserId = aspnet_Membership.UserId INNER JOIN aspnet_Users ON aspnet_Membership.UserId = aspnet_Users.UserId WHERE Details.UserId = @UserId" onselecting="SqlDataSource1_Selecting" UpdateCommand="UPDATE Details SET CustName = @CustName, CustNum = @CustNum, CustRole = @CustRole, CustStatus = @CustStatus, PName = @PName, PEmail = @PEmail, PRole = @PRole, WedDate = @WedDate WHERE [UserId] = @UserId"> <SelectParameters> <asp:Parameter Name="UserId" type="String" /> </SelectParameters>
편집
<UpdateParameters> <asp:Parameter Name="UserId" type="String" /> <asp:Parameter Name="CustName" type="String" /> <asp:Parameter Name="CustNum" type="String" /> <asp:Parameter Name="CustRole" type="String" /> <asp:Parameter Name="CustStatus" type="String" /> <asp:Parameter Name="PName" type="String" /> <asp:Parameter Name="PEmail" type="String" /> <asp:Parameter Name="PRole" type="String" /> <asp:Parameter Name="WedDate" type="String" /> </UpdateParameters> </asp:SqlDataSource> <br /> <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataSourceID="SqlDataSource1" Height="29px" Width="476px"> <Fields> <asp:BoundField DataField="UserName" HeaderText="UserName" SortExpression="UserName" ReadOnly="True" /> <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" /> <asp:BoundField DataField="CustName" HeaderText="CustName" SortExpression="CustName" /> <asp:BoundField DataField="CustNum" HeaderText="CustNum" SortExpression="CustNum" /> <asp:BoundField DataField="CustRole" HeaderText="CustRole" SortExpression="CustRole" /> <asp:BoundField DataField="CustStatus" HeaderText="CustStatus" SortExpression="CustStatus" /> <asp:BoundField DataField="PName" HeaderText="PName" SortExpression="PName" /> <asp:BoundField DataField="PEmail" HeaderText="PEmail" SortExpression="PEmail" /> <asp:BoundField DataField="PRole" HeaderText="PRole" SortExpression="PRole" /> <asp:BoundField DataField="WedDate" HeaderText="WedDate" SortExpression="WedDate" /> <asp:CommandField ShowEditButton="True" /> </Fields> <PagerTemplate> <br /> </PagerTemplate> </asp:DetailsView>
이것은
UserProfile.aspx.cs
파일 :
는 다음 나는 (UserProfile.aspx
내부) 현재 로그인 한 사용자를 얻을 코드입니다
protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
// Get a reference to the currently logged on user
MembershipUser currentUser = Membership.GetUser();
// Determine the currently logged on user's UserId value
// Assign the currently logged on user's UserId to the @UserId parameter
//access the parameter value using e.Command.Parameters
//programmatically set the @UserId:
e.Command.Parameters["@UserId"].Value = currentUser.ProviderUserKey.ToString();
Response.Write(currentUser.ProviderUserKey.ToString());
//When I run the webform, the UserId of the current logged-in user had displayed,
// the @UserId was not empty.
}
아마도 업데이트 쿼리가 @UserId
을 감지하지 못한다고 생각했습니다. 그러나 이 SELECT
쿼리에서 작동하기 때문에 UPDATE
에서 그 이유는 무엇입니까 ???
업데이트 문이 작동하지 않는 .. 데이터는 업데이트되지 않았습니다 '업데이트'버튼이 눌 렸을 때 – user1501969
아직도 오류가 있습니까? 또는 사용자 세부 정보를 변경하지 않고 단추를 누른 후 페이지가 다시 게시됩니까? – Fellmeister
예, 설명하는 것과 같습니다. DataKeyNames = "UserName"을 추가하더라도 detailsview는 여전히 업데이트 할 수 없습니다. – user1501969