----------------------------------------------------------------------- Imports System.Data.SqlClient Public Class Form1 Inherits System.Windows.Forms.Form ' -------------------------------------------------------- ' 検索と更新を別処理とするため、ここで情報の橋渡しを行う ' -------------------------------------------------------- Dim strTargetId As String ' 削除対象の商品IDを保存 Dim strTargetName As String ' 削除対象の商品名を保存       : (システムが自動生成したコードは省略)       : ' ---------------------------------------------------------- ' 対象商品の検索 ' 商品IDをキーにテーブルを検索し、品名と在庫数を表示 ' ---------------------------------------------------------- Private Sub btnSearch_Click _ (ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles btnSearch.Click Dim strSql As String ' 検索用の接続文字列を設定 strSql = _ "SELECT 商品_dmy.商品ID, 商品_dmy.品名, 商品_dmy.仕入単価, " & _ "商品_dmy.販売単価, 在庫_mr.在庫 " & _ "FROM 商品_dmy INNER JOIN 在庫_mr ON 商品_dmy.商品ID = 在庫_mr.商品ID " & _ "WHERE 商品_dmy.商品ID = " ' テキストボックスの未入力チェック If Me.txtItemId.Text = "" Then MessageBox.Show("商品IDを入力してください。", _ "入力エラー", MessageBoxButtons.OK) Else ' パラメータを付け足して検索を実行 strSql = strSql & txtItemId.Text Search(strSql) End If End Sub ' ------------------------------------------------ ' 実際の検索処理(引数はSQL文字列と検索パラメータ) ' ------------------------------------------------ Private Sub Search(ByVal strSql As String) Dim objConnect As New SqlConnection Dim objCommand As New SqlCommand Dim objDataReader As SqlDataReader Try ' 接続文字列の設定 objConnect.ConnectionString = _ "Persist Security Info=False;Integrated Security=SSPI;database=db1001ya;server=localhost" ' コネクションの設定 objCommand.Connection = objConnect ' 接続を開く objConnect.Open() ' SQLの設定 objCommand.CommandText = strSql ' 検索処理(結果をデータリーダに受け取る) ' 取得するレコードは常に1件なので、パラメータにCommandBehavior.SingleRowを指定 objDataReader = objCommand.ExecuteReader(CommandBehavior.SingleRow) If objDataReader.Read() Then ' 検索成功 lblItemName.Text = objDataReader("品名") lblNumStock.Text = objDataReader("在庫") txtBuyPrice.Text = objDataReader("仕入単価") txtSalePrice.Text = objDataReader("販売単価") ' グローバル変数にIDと品名を保存(更新対象) strTargetId = txtItemId.Text strTargetName = lblItemName.Text Else ' 検索失敗 MessageBox.Show( _ "該当する商品が見つかりません。", "検索エラー", MessageBoxButtons.OK) InitForm() Exit Sub End If Catch objExcept As Exception ' 例外処理 MessageBox.Show(objExcept.ToString, "DBエラー", MessageBoxButtons.OK) Finally ' データリーダを閉じる If Not objDataReader Is Nothing Then objDataReader.Close() End If ' 接続を閉じる If Not objConnect Is Nothing Then objConnect.Close() End If End Try End Sub ' ------------------------------------------------ ' 更新処理(対象レコードはグローバル変数から取得) ' ------------------------------------------------ Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click Dim objConnect As New SqlConnection Dim objCommand As New SqlCommand Dim strMessage As String Dim strSql As String ' 更新用の接続文字列を設定 strSql = _ "UPDATE 商品_dmy SET" & _ " 仕入単価 = " & txtBuyPrice.Text & ", 販売単価 = " & txtSalePrice.Text & _ "WHERE 商品ID = " & strTargetId ' ユーザー宛の確認メッセージ strMessage = "商品ID:" & strTargetId & vbCrLf & _ "品名:" & strTargetName & vbCrLf & _ "のデータを更新します。よろしいですか?" ' 未検索時には処理を行わない If (strTargetId = "") Or (strTargetName = "") Then MsgBox("商品が特定されていません。", MsgBoxStyle.OKOnly, "商品エラー") Exit Sub End If ' ユーザーに更新の確認を求める If MsgBox(strMessage, MsgBoxStyle.YesNo, "更新の確認") = MsgBoxResult.No Then Exit Sub End If Try ' 接続文字列の設定 objConnect.ConnectionString = _ "Persist Security Info=False;Integrated Security=SSPI;database=db1001ya;server=localhost" ' コネクションの設定 objCommand.Connection = objConnect ' 接続を開く objConnect.Open() ' SQLの設定 objCommand.CommandText = strSql If objCommand.ExecuteNonQuery >= 1 Then ' 更新実行 MsgBox("商品データを更新しました。", MsgBoxStyle.OKOnly, "更新完了") InitForm() ' 再実行に備えてテキストボックスとグローバル変数を初期化 Else ' 検索失敗 MsgBox("該当する商品が見つかりません。", MsgBoxStyle.OKOnly, "検索エラー") Exit Sub End If Catch objExcept As Exception ' 例外処理 MsgBox(objExcept.ToString, MsgBoxStyle.OKOnly, "DBエラー") Finally ' 接続を閉じる If Not objConnect Is Nothing Then objConnect.Close() End If End Try End Sub ' ------------------------------------------------ ' フォームとグローバル変数の初期化 ' ------------------------------------------------ Private Sub InitForm() strTargetId = "" strTargetName = "" txtItemId.Text = "" lblItemName.Text = "?" lblNumStock.Text = "?" txtBuyPrice.Text = "0" txtSalePrice.Text = "0" End Sub ' ------------------------------------------------ ' フォームの初期化 ' ------------------------------------------------ Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load InitForm() End Sub ' ------------------------------------------------ ' 処理を終了 ' ------------------------------------------------ Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click Me.Close() End Sub End Class -----------------------------------------------------------------------