[英]Formview: check if record exist when user try to insert data ASP.NET C#
如果用户单击插入链接按钮后数据库中存在记录,是否可以生成消息框? 我希望formview检查记录是否存在,如果没有插入。
非常感谢帮助。 提前致谢 :)
这是我的代码示例:
注意:对于书籍ID / ISBN,请参阅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" /> <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>
您可以签入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.
}
}
}
最好在表上放置一个唯一索引,并捕获尝试插入重复记录时发生的异常。
这是确保完整性的最简单方法。 否则,您必须启动读取事务来处理在您检查的时间和插入的时间之间的情况,其他一些进程正在执行完全相同的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.