おのれ鍋奉行が!

CustomValidatorコントロールによる重複チェック

最終更新:

lmes2

- view
メンバー限定 登録/ログイン

CustomValidatorコントロールによる重複チェック


概要

CustomValidator コントロールを使用し、データベース内のレコードと、フォームの入力が重複しているかをチェックする。

※CustomValidator コントロール: ユーザー定義の入力チェックを行うコントロール。

参照:

元ネタ:

参考:

前提条件


手順

default.aspx を以下のように変更。

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>無題のページ</title>
</head>
<body>
<form id="Form1" runat="server">
    ISBNコード:
    <asp:TextBox id="code" runat="Server"  MaxLength="13" />
 
    <%-- CustomValidator ここから --%>
 
        <asp:CustomValidator id="customValid" runat="Server"
          ControlToValidate="code" EnableClientScript="False"
          OnServerValidate="customValid_ServerValidate" Display="Dynamic"
          ErrorMessage="ISBNコードが重複しています。" />
 
    <%-- CustomValidator ここまで --%>      
 
      <br />
    タイトル:
    <asp:TextBox id="title" runat="Server"  MaxLength="100" /><br />
    出版社:
    <asp:TextBox id="publish" runat="Server"  MaxLength="15" /><br />
    <asp:Button id="objBtn" runat="Server" Text="登録" OnClick="objBtn_Click" />
        &nbsp;
</form>
</body>
</html> 
 

default.aspx.vb を以下のように変更。

Imports System.Data
Imports System.Data.SqlClient
 
Partial Class _Default
    Inherits System.Web.UI.Page
 
    Sub customValid_ServerValidate(ByVal sender As Object, ByVal e As ServerValidateEventArgs)
 
        ' web.config から接続文字列を取得
        Dim str_conn As String
        str_conn = System.Configuration.ConfigurationManager. _
        ConnectionStrings.Item("masterConnectionString1").ToString()
 
        ' ISBNコードをキーにbooksテーブルを検索
        Dim objDb As New SqlConnection(str_conn)
        Dim objCom As New SqlCommand("SELECT * FROM hoge WHERE code=@code", objDb)
        objCom.Parameters.AddWithValue("@code", e.Value)
        objDb.Open()
        Dim objDr As SqlDataReader = objCom.ExecuteReader()
 
        ' レコードを取得できなかったら、データが重複していないので検証は成功
        e.IsValid = (Not objDr.HasRows)
        objDb.Close()
 
    End Sub
 
    Sub objBtn_Click(ByVal sender As Object, ByVal e As EventArgs)
 
        If Page.IsValid Then
            ' 検証に成功した場合の処理を記述
        End If
 
    End Sub
 
End Class
 

実行するとこういう画面が出る。

not found (227.jpg)

ISBNを、既に存在する値と重複させて入力する。

not found (228.jpg)

以下のようなエラーがでる。

not found (229.jpg)
記事メニュー
目安箱バナー