ADO.NET Accessのホームへ戻る

SQLInsertにパラメータを指定してレコードを追加するサンプル

 SQLInsertにパラメータを指定してレコードを追加するサンプル

 

このサンプルは、SQLInsertステートメントにパラメータ(Positional Parameter)として疑問符(?)を指定して、AccessNwind.mdbデータベースの得意先テーブルにレコードを追加します。実行結果として追加したレコードの得意先IDを表示します。

 

このサンプルでは、以下のノウハウを習得することができます。

 

  SQLInsertステートメントにパラメータ(Positional Parameter)を指定する方法

  パラメータ(Positional Parameter)に値を設定する方法

 

サンプルのPage_Load()イベントでは、AccessNwind.mdbデータベースの得意先テーブルにレコードを追加します。行7-8では、SQLInsertステートメントを生成しています。InsertValues()には、パラメータとして?を指定しています。

 

OleDbNamespaceを使用するときは、パラメータ(Positional Parameter)として?を使用します。SqlClientNamespaceを使用するときは、パラメータ(Named Parameter)として名前を使用します。

 

System.Data.OleDb使用時のパラメータ(Positional Parameter)

Insert Into Customers
(CompanyName, ContactName, Phone) Values(?, ?, ?)

System.Data.SqlClient使用時のパラメータ(Named Parameter)

Insert Into Customers
(CompanyName, ContactName, Phone) Values(@CompanyName, @ContactName, @Phone)

ここで指定したパラメータには、ParametersコレクションのAdd()/Valueで値を設定します。行9では、追加した得意先レコードの得意先IDを取得するSQLを生成しています。行10-12では、OleDbConnectionOleDbCommandのインスタンスを生成しています。

 

14-15では、パラメータ変数@CompanyNameを追加して値を設定しています。パラメータ変数は、OleDbCommandParametersコレクションのAdd()メソッドで追加します。Add()メソッドの引数には、パラメータ変数名、データ型、サイズを指定します。パラメータの値は、OleDbCommandParametersコレクションのValueプロパティに設定します。行14-15を結合させて以下のように記述することもできます。

 

cmd.Parameters.Add("@CompanyName", OleDbType.VarWchar, 40).Value = "フレンドリーソフト"

16-17では、パラメータ変数@ContactNameを追加して値を設定しています。行18-19では、パラメータ変数@Phoneを追加して値を設定しています。パラメータ?に値を設定するときは、Insertステートメントで記述した順番に設定します。InsertValues()には、3個の?が指定されていますが、CompanyNameContactNamePhoneの順番になっています。

 

パラメータ変数に値を設定するには、ParametersコレクションのValueプロパティを省略してAdd()メソッドで直接設定することもできます。

 

cmd.Parameters.Add("@CompanyName", "フレンドリーソフト")

cmd.Parameters.Add("@ContactName", "葛西 秋雄")

cmd.Parameters.Add("@Phone", "0480-99-9999")

 

パラメータ変数に値を設定するときは、省略形を使用しないで明示的にデータ型とサイズを指定することをお薦めします。

 

21では、OleDbConnectionOpen()メソッドでAccessNwind.mdbデータベースを開いています。行22では、OleDbCommandExecuteNonQuery()メソッドでInsertステートメントを実行して得意先テーブルにレコードを追加しています。行23-24では、OleDbCommandExecuteScalar()メソッドで直前に追加したレコードの得意先IDを取得しています。得意先IDは、オートナンバー型のフィールドですからAccessが自動採番します。行25では、OleDbConnectionClose()メソッドでAccessNwind.mdbデータベースを閉じています。行26-28では、LabelTextプロパティに追加したレコードの得意先IDを設定して表示しています。

 

  6: Sub Page_Load()
  7:   Dim strSqlInsert As String = "Insert Into Customers " & _
  8:     "(CompanyName, ContactName, Phone) Values(?,?,?)"
  9:   Dim strSqlSelect As String = "Select @@Identity"
 10:   Dim con As New OleDbConnection( _
 11:     ConfigurationSettings.AppSettings("conStringAccNw"))
 12:   Dim cmd As New OleDbCommand(strSqlInsert, con)
 13:
 14:   cmd.Parameters.Add("@CompanyName", OleDbType.VarWchar, 40)
 15:   cmd.Parameters("@CompanyName").Value = "
フレンドリーソフト"
 16:   cmd.Parameters.Add("@ContactName", OleDbType.VarWchar, 30)
 17:   cmd.Parameters("@ContactName").Value = "
葛西 秋雄"
 18:   cmd.Parameters.Add("@Phone", OleDbType.VarWchar, 24)
 19:   cmd.Parameters("@Phone").Value = "0480-99-9999"
 20:
 21:   con.Open()
 22:   cmd.ExecuteNonQuery()
 23:   cmd.CommandText = strSqlSelect
 24:   Dim intCustomerID As Integer = cmd.ExecuteScalar()
 25:   con.Close()
 26:   lblMessage.Text = _
 27:     String.Format("
得意先ID<b>{0}</b>を追加しました.", _
 28:     intCustomerID.ToString())
 29: End Sub

 

ADO.NET Accessのホームへ戻る