【问题标题】:error in Update command更新命令错误
【发布时间】:2014-03-26 08:55:28
【问题描述】:

在我的项目(使用 C# 的 Asp.net 网站)中,我有一个连接到 sqlserevrDataSource 的表单视图。 因为使用为 sqlDataSource 配置指定自定义 sql 语句,我不能使用 Advanced 按钮进行活动 Insert,Update,Delete 。现在为我的数据源添加更新功能,我在我的源代码中手动添加了 UpdateCommand,但它有一个错误说:

Invalid column name 'Email'.
Invalid column name 'IsApproved'.
Invalid column name 'IsLockedOut'.
Invalid column name 'LastLockoutDate'.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

代码:

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPageAdmin.master" AutoEventWireup="true" CodeFile="edit-user.aspx.cs" Inherits="edit_user" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

        <asp:FormView ID="FormView1" runat="server" DefaultMode="Edit" DataSourceID="SqlDataSource1">
            <EditItemTemplate>
                UserName:
                <asp:TextBox ID="UserNameTextBox" runat="server" Text='<%# Bind("UserName") %>' />
                <br />
                LastActivityDate:
                <asp:TextBox ID="LastActivityDateTextBox" runat="server" Text='<%# Bind("LastActivityDate") %>' />
                <br />
                Email:
                <asp:TextBox ID="EmailTextBox" runat="server" Text='<%# Bind("Email") %>' />
                <br />
                IsApproved:
                <asp:CheckBox ID="IsApprovedCheckBox" runat="server" Checked='<%# Bind("IsApproved") %>' />
                <br />
                IsLockedOut:
                <asp:CheckBox ID="IsLockedOutCheckBox" runat="server" Checked='<%# Bind("IsLockedOut") %>' />
                <br />
                LastLockoutDate:
                <asp:TextBox ID="LastLockoutDateTextBox" runat="server" Text='<%# Bind("LastLockoutDate") %>' />
                <br />
                UserId:
                <asp:TextBox ID="UserIdTextBox" runat="server" Text='<%# Bind("UserId") %>' />
                <br />
                <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update" Text="Update" />
                &nbsp;<asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel" />
            </EditItemTemplate>
            <InsertItemTemplate>
                UserName:
                <asp:TextBox ID="UserNameTextBox" runat="server" Text='<%# Bind("UserName") %>' />
                <br />
                LastActivityDate:
                <asp:TextBox ID="LastActivityDateTextBox" runat="server" Text='<%# Bind("LastActivityDate") %>' />
                <br />
                Email:
                <asp:TextBox ID="EmailTextBox" runat="server" Text='<%# Bind("Email") %>' />
                <br />
                IsApproved:
                <asp:CheckBox ID="IsApprovedCheckBox" runat="server" Checked='<%# Bind("IsApproved") %>' />
                <br />
                IsLockedOut:
                <asp:CheckBox ID="IsLockedOutCheckBox" runat="server" Checked='<%# Bind("IsLockedOut") %>' />
                <br />
                LastLockoutDate:
                <asp:TextBox ID="LastLockoutDateTextBox" runat="server" Text='<%# Bind("LastLockoutDate") %>' />
                <br />
                UserId:
                <asp:TextBox ID="UserIdTextBox" runat="server" Text='<%# Bind("UserId") %>' />
                <br />
                <asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert" Text="Insert" />
                &nbsp;<asp:LinkButton ID="InsertCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel" />
            </InsertItemTemplate>
            <ItemTemplate>
                UserName:
                <asp:Label ID="UserNameLabel" runat="server" Text='<%# Bind("UserName") %>' />
                <br />
                LastActivityDate:
                <asp:Label ID="LastActivityDateLabel" runat="server" Text='<%# Bind("LastActivityDate") %>' />
                <br />
                Email:
                <asp:Label ID="EmailLabel" runat="server" Text='<%# Bind("Email") %>' />
                <br />
                IsApproved:
                <asp:CheckBox ID="IsApprovedCheckBox" runat="server" Checked='<%# Bind("IsApproved") %>' Enabled="false" />
                <br />
                IsLockedOut:
                <asp:CheckBox ID="IsLockedOutCheckBox" runat="server" Checked='<%# Bind("IsLockedOut") %>' Enabled="false" />
                <br />
                LastLockoutDate:
                <asp:Label ID="LastLockoutDateLabel" runat="server" Text='<%# Bind("LastLockoutDate") %>' />
                <br />
                UserId:
                <asp:Label ID="UserIdLabel" runat="server" Text='<%# Bind("UserId") %>' />
                <br />

            </ItemTemplate>
        </asp:FormView>

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 

    ConnectionString="<%$ ConnectionStrings:akhbarrConnectionString %>" 
    SelectCommand="SELECT aspnet_Users.UserName, aspnet_Users.LastActivityDate, aspnet_Membership.Email, aspnet_Membership.IsApproved, aspnet_Membership.IsLockedOut, aspnet_Membership.LastLockoutDate, aspnet_Users.UserId FROM aspnet_Users INNER JOIN aspnet_Membership ON aspnet_Membership.UserId = aspnet_Users.UserId WHERE (aspnet_Users.UserName = @UserName)"
        updatecommand="update [aspnet_Users] set [UserName] =@UserName , [LastActivityDate]= @LastActivityDate , [Email]= @Email , [IsApproved] = @IsApproved , [IsLockedOut] = @IsLockedOut , [LastLockoutDate] = @LastLockoutDate , [UserId]= @UserId from aspnet_Users INNER JOIN aspnet_Membership ON aspnet_Membership.UserId = aspnet_Users.UserId">

        <UpdateParameters>
            <asp:Parameter Name="UserName" Type="string" />
            <asp:Parameter Name="LastActivityDate" Type="DateTime" />
            <asp:Parameter Name="Email" Type="string" />
            <asp:Parameter Name="IsApproved" Type="Boolean" />
            <asp:Parameter Name="IsLockedOut" Type="Boolean" />
            <asp:Parameter Name="LastLockoutDate" Type="DateTime" />
            <asp:Parameter Name="UserId" Type="String" />


        </UpdateParameters>
         <SelectParameters>
            <asp:QueryStringParameter DefaultValue="0" Name="UserName" QueryStringField="UserName" />
        </SelectParameters>
        </asp:SqlDataSource>

</asp:Content>

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    这个错误仅仅意味着你试图在一些不包含这些列的数据表上运行你的命令。您需要确保您的更新命令是正确的。复制您尝试运行的命令并在 sql server management studio 中直接针对您的数据库运行。

    【讨论】:

      【解决方案2】:

      您不能通过此查询更新两个表。据我了解你的

      'Email',
      'IsApproved'.
      'IsLockedOut'.
      'LastLockoutDate'
      

      列属于表aspnet_Membership,您正在使用查询

      update [aspnet_Users] set [UserName] =@UserName , [LastActivityDate]= @LastActivityDate ,   
      [Email]= @Email , [IsApproved] = @IsApproved , [IsLockedOut] = @IsLockedOut , 
      [LastLockoutDate] = @LastLockoutDate , [UserId]= @UserId from aspnet_Users INNER JOIN  
      aspnet_Membership ON aspnet_Membership.UserId = aspnet_Users.UserId
      

      它只更新表 aspnet_Users 的列。

      编辑 -

       update [aspnet_Users] set [UserName] =@UserName , [LastActivityDate]=  
       @LastActivityDate Where [UserId]=@userId 
      

      update [aspnet_Membership] set [Email]= @Email , [IsApproved] = @IsApproved , 
      [IsLockedOut] =  @IsLockedOut , [LastLockoutDate] = @LastLockoutDate where UserId= @UserId
      

      【讨论】:

      • 你有什么建议吗?如何更新连接表?
      • 你可以使用两个单一的查询来更新两个表
      • 谢谢,我删除了一张不必要的表格,现在没有问题了
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多