窗体视图:当用户尝试 ASP.NET C# 插入数据时检查记录是否存在

本文关键字:数据 插入 检查 记录 存在 是否 NET 视图 用户 ASP 窗体 | 更新日期: 2023-09-27 17:55:29

如果用户单击插入链接按钮后数据库中存在记录,我有没有办法生成消息框?我希望表单视图检查记录是否存在,如果不进行插入。

帮助将不胜感激。提前致谢:)

这是我的代码示例:

管理图书

添加/删除书籍

注意:有关书籍 ID/ISBN,请参阅国际标准书号中的条形码,通常位于 在书的后面。需要条形码阅读器。

    <EditItemTemplate>
        Book ID/ISBN:
        <asp:Label ID="bookidLabel1" runat="server" Text='<%# Eval("bookid") %>' />
        <br />
        Title:
        <asp:TextBox ID="booktitleTextBox" runat="server" 
            Text='<%# Bind("booktitle") %>' />
        <br />
        Author's lastname:
        <asp:TextBox ID="lastnameTextBox" runat="server" 
            Text='<%# Bind("lastname") %>' />
        <br />
        Author's firstname:
        <asp:TextBox ID="firstnameTextBox" runat="server" 
            Text='<%# Bind("firstname") %>' />
        <br />
        Description:
        <asp:TextBox ID="descriptionTextBox" runat="server" 
            Text='<%# Bind("description") %>' />
        <br />
        Category:
        <asp:TextBox ID="categoryidTextBox" runat="server" 
            Text='<%# Bind("categoryid") %>' />
        <br />
        Date added:
        <asp:TextBox ID="dateaddedTextBox" runat="server" 
            Text='<%# Bind("dateadded") %>' />
        <br />
        Status:
        <asp:TextBox ID="statusidTextBox" runat="server" 
            Text='<%# Bind("statusid") %>' />
        <br />
        Quantity:
        <asp:TextBox ID="quantityTextBox" runat="server" 
            Text='<%# Bind("quantity") %>' />
        <br />
        name:
        <asp:TextBox ID="nameTextBox" runat="server" Text='<%# Bind("name") %>' />
        <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>
        Book ID:
        <asp:TextBox ID="bookidTextBox" runat="server" Text='<%# Bind("bookid") %>' />
        <asp:RequiredFieldValidator ID="RequesFieldValidator1" runat="server" ErrorMessage="* Required" ControlToValidate="bookidTextBox" ValidationGroup="InsertBook">
        </asp:RequiredFieldValidator>
        <asp:RegularExpressionValidator ID="RegularExpressionValidator" runat="server" Display="Dynamic" ControlToValidate="bookidTextBox" ValidationExpression="^(['S's]{13,13})$" ErrorMessage="Invalid ID/ISBN. Please try again" ValidationGroup="InsertBook">
        </asp:RegularExpressionValidator>
        <br />
        Title:
        <asp:TextBox ID="booktitleTextBox" runat="server" 
            Text='<%# Bind("booktitle") %>' />
        <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="* Required" ControlToValidate="booktitleTextBox" ValidationGroup="InsertBook">
        </asp:RequiredFieldValidator>
        <br />
        Author's lastname:
        <asp:TextBox ID="lastnameTextBox" runat="server" 
            Text='<%# Bind("lastname") %>' />
        <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="* Required" ControlToValidate="lastnameTextBox" ValidationGroup="InsertBook">
        </asp:RequiredFieldValidator>
        <br />
        Author's firstname:
        <asp:TextBox ID="firstnameTextBox" runat="server" 
            Text='<%# Bind("firstname") %>' />
        <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ErrorMessage="* Required" ControlToValidate="firstnameTextBox" ValidationGroup="InsertBook">
        </asp:RequiredFieldValidator>
        <br />
        Description:
        <asp:TextBox ID="descriptionTextBox" runat="server" 
            Text='<%# Bind("description") %>' />
        <asp:RequiredFieldValidator ID="RequiredFieldValidator5" runat="server" ErrorMessage="* Required" ControlToValidate="descriptionTextBox" ValidationGroup="InsertBook">
        </asp:RequiredFieldValidator>
        <br />
        Category:
        <asp:DropDownList ID="DropDownList1" runat="server" 
            DataSourceID="categoryDataSource" DataTextField="name" 
            DataValueField="categoryid" SelectedValue='<%# Bind("categoryid", "{0}") %>'>
        </asp:DropDownList>
        <asp:SqlDataSource ID="categoryDataSource" runat="server" 
            ConnectionString="<%$ ConnectionStrings:LibrarySystemConnectionString %>" 
            SelectCommand="SELECT [categoryid], [name] FROM [TblCategory]">
        </asp:SqlDataSource>
        <br />
        Date added:
        <asp:TextBox ID="dateaddedTextBox" runat="server" 
            Text='<%# Bind("dateadded") %>'/>
        <asp:RequiredFieldValidator ID="RequiredFieldValidator6" runat="server" ErrorMessage="* Required" ControlToValidate="dateaddedTextBox" ValidationGroup="InsertBook">
        </asp:RequiredFieldValidator>
        <%--<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
        ControlToValidate="dateaddedTextBox" ErrorMessage="RegularExpressionValidator"
        ValidationExpression="(19|20)'d'd(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])">
        </asp:RegularExpressionValidator>--%>
        <br />
        Status:
        <asp:DropDownList ID="DropDownList2" runat="server" 
            DataSourceID="statusDataSource" DataTextField="statusname" 
            DataValueField="statusid" SelectedValue='<%# Bind("statusid", "{0}") %>'>
        </asp:DropDownList>
        <asp:SqlDataSource ID="statusDataSource" runat="server" 
            ConnectionString="<%$ ConnectionStrings:LibrarySystemConnectionString %>" 
            SelectCommand="SELECT [statusid], [statusname] FROM [BookStatus]">
        </asp:SqlDataSource>
        <br />
        Quantity:
        <asp:TextBox ID="quantityTextBox" runat="server" 
            Text='<%# Bind("quantity") %>' />
        <asp:RequiredFieldValidator ID="RequiredFieldValidator7" runat="server" ErrorMessage="* Required" ControlToValidate="quantityTextBox" ValidationGroup="InsertBook">
        </asp:RequiredFieldValidator>
        <br />
        <asp:Button ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert" Text="Add" ValidationGroup="InsertBook"/>
        <asp:Button ID="InsertCancelButton" runat="server" 
            CausesValidation="False" CommandName="Cancel" Text="Cancel" />
    </InsertItemTemplate>
    <ItemTemplate>
        <asp:LinkButton ID="NewButton" runat="server" CausesValidation="False" 
            CommandName="New" Text="New" />
    </ItemTemplate>
    <EmptyDataTemplate>
        <asp:LinkButton ID="NewButton" runat="server" CausesValidation="False" 
            CommandName="New" Text="New" />
    </EmptyDataTemplate>
    <HeaderTemplate>
        Add a new book
    </HeaderTemplate>
</asp:FormView>

窗体视图:当用户尝试 ASP.NET C# 插入数据时检查记录是否存在

您可以签入 ItemInserting 方法。

像这样:

void FormViewName_ItemInserting(object sender, FormViewInsertEventArgs e)
{
  string somevalue = e.Values["somefieldtoget"];
  //make your calls to the DB to check the somevalue doesn't exist 
  if(exists)
    e.Cancel = true; 
}

您也可以在数据源插入方法(假定为 sql 数据源)上执行此操作。

void datasourcename_Inserting(object sender, SqlDataSourceCommandEventArgs e)
{
...
}

@steve-wellens提到的另一种方法是,如果您的主键基于表单视图中的一个或多个字段(不是自动生成的数字),那么下面的主键将非常适合捕获插入重复键/记录的尝试。

void FormViewName_ItemInserted(object sender, FormViewInsertedEventArgs e)
{
  if (e.Exception != null)
  {
   if (((SqlException)e.Exception).Number == 2627)
   {
    e.ExceptionHandled = true;
    e.KeepInInsertMode = true;
    // Display error message.
   }
  }
}
最好在

表上放置一个唯一的索引,并捕获尝试插入重复记录时发生的异常。

这是确保完整性的最简单方法。 否则,您必须启动读取事务来处理在检查和插入之间,其他进程正在执行完全相同的事情的情况。