SQLのDeleteステートメントでレコードを削除するサンプル

図 SQLのDeleteステートメントでレコードを削除するサンプル
このサンプルは、SQLのDeleteステートメントでAccessのNwind.mdbデータベースの得意先テーブルからレコードを削除します。実行結果として削除したレコード件数を表示します。
このサンプルでは、以下のノウハウを習得することができます。
▲ OleDbConnectionのOpen(),Close()メソッドの使い方
▲ OleDbCommandのExecuteNonQuery()メソッドの使い方
▲ SQLのDeleteステートメントの使い方
サンプルのPage_Load()イベントでは、AccessのNwind.mdbデータベースの得意先テーブルからレコードを削除します。行7-8では、SQLのDeleteステートメントを生成しています。
Delete * Customers
Where CompanyName='フレンドリーソフト'
Deleteに続く*は、省略できます。DeleteのWhere句では、CompanyName=”フレンドリーソフト”を指定していますので、フレンドリーソフトのレコードが削除されます。行9-10では、OleDbConnectionのインスタンスを生成しています。行11では、OleDbCommandのインスタンスを生成しています。行14では、OleDbConnectionのOpen()メソッドでAccessのNwind.mdbデータベースを開いています。行15では、OleDbCommnad()のExecuteNonQuery()メソッドでDeleteステートメントを実行して得意先テーブルからレコードを削除しています。ExecuteNonQuery()メソッドでは、戻り値として削除されたレコード件数が返されます。行16では、OleDbConnectionのClose()メソッドでAccessのNwind.mdbデータベースを閉じています。行17-19では、LabelのTextプロパティに削除されたレコード件数を設定して表示しています。
6: Sub Page_Load()
7: Dim strSqlDelete As String = "Delete
* From Customers " & _
8: "Where CompanyName='フレンドリーソフト';"
9: Dim con As New OleDbConnection( _
10:
ConfigurationSettings.AppSettings("conStringAccNw"))
11: Dim cmd As New
OleDbCommand(strSqlDelete, con)
12: Dim intDeleteCount As Integer
13:
14: con.Open()
15: intDeleteCount =
cmd.ExecuteNonQuery()
16: con.Close()
17: lblMessage.Text = _
18:
String.Format("<b>{0}</b>件の得意先を削除しました.", _
19:
intDeleteCount.ToString())
20: End Sub
Note
|
ランタイム時にSQLを生成するときのセキュリティ上の留意点 テキストボックスから得意先名を入力させてSQLのWhere句をランタイム時に生成するような場合、ハッカーにデータベースを覗かれたり、改ざんされる可能性があります。テキストボックスに「フレンドリーソフト」のようなデータを入力したときは、次のようなSQLが生成されて期待した結果が表示されます。
ところが、テキストボックスに「'フレンドリーソフト' Or '' = ''」のようなデータを入力したときは、次のようなSQLが生成されて得意先のすべてのデータが表示されてしまいます。 Select * From Customers Where CompanyName='フレンドリーソフト' Or '' = '' また、テキストボックスに「フレンドリーソフト'; Update Customers Set Phone='03-9999-9999' Where CustomerID=143」のようなデータを入力すると、SQLのUpdateステートメントが埋め込まれてデータベースが書き換えられてしまいます。 6: Sub btnExecuteSQL_Click(s As Object, e
As EventArgs) このようなセキュリティの問題を解決するには、テキストボックスに入力されたデータからシングルクオテーション(') を除去します。シングルクオテーションを除去するには、Regular Expressionクラスを利用すると便利です。次の例では、RegExクラスのReplace()メソッドで英数字と空白以外の文字を除去しています。 Dim objRegEx As New RegEx("[^0-9a-zA-Z\s]") Response.Write( objRegEx.Replace("Friendly Soft' Or ''='" ,"") ) è Friendly Soft Or テキストボックスに不正なデータを入力した時点でチェックするには、RegularExpressionValidatorを使用します。ValidationExpressionプロパティには、"[0-9a-zA-Z\s]*"を設定します。ここで設定したRegular Expressionは、英数字と空白のみ許可することを意味します。 <asp:TextBox id="txtCustomerName" runat="server" Width="20em" /> <asp:RegularExpressionValidator runat="server" ControlToValidate="txtCustomerName" ValidationExpression="[0-9a-zA-Z\s]*" Text="Invalid Customer Name" /> |