VisualStudio2019で、データベースの使用を勉強しています。
Accessに接続して、OleDbCommandBuilderを実行したところ、コメントのようなCommandTextを取得することができました。
UPDATE文、DELETE文のCommandTextの中の(? = 1 AND 苗字 IS NULL)の意味を教えて頂けませんか?
「苗字 IS NULL」は、レコードの苗字列の値がDbNullの場合はTrueを返すという事は理解していますが、「? = 1」の意味が解りません。
詳しい方、宜しくお願い致します。
(Accessのテーブル構成)
インスタンス名 Access2010
データベース名 データベース勉強用DB
論理テーブル名 Test
物理テーブル名 INSERT文.accdb
列定義
No 論理名 物理名 データ型 Null許容 主キー
1 ID ID 長整数(8,0) No Yes
2 苗字 苗字 テキスト型(10) No
3 名前 名前 テキスト型(10) No
4 年齢 年齢 十進数(18) No
Dim oledb As String = "Microsoft.ACE.OLEDB.16.0;"
Dim acfile As String = "D:\データベース勉強用DB\INSERT文.accdb"
Dim Cn As New OleDb.OleDbConnection($"Provider={oledb} Data Source={acfile}")
Dim Da As New OleDbDataAdapter("SELECT * FROM 既存テーブル", Cn)
Dim Ds As New DataSet
Da.Fill(Ds, "Test")
Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(Da)
Dim INS_Cmd = builder.GetInsertCommand()
Dim UPD_Cmd = builder.GetUpdateCommand()
Dim DEL_Cmd = builder.GetDeleteCommand
以下のCommandTextが設定されます。
'INS_ Cmd.CommandText : INSERT INTO 既存テーブル (苗字, 名前, 年齢) VALUES (?, ?, ?)
'UPD_ Cmd.CommandText :UPDATE 既存テーブル SET 苗字 = ?, 名前 = ?, 年齢 = ?
WHERE ((ID = ?) AND
((? = 1 AND 苗字 IS NULL) OR (苗字 = ?)) AND
((? = 1 AND 名前 IS NULL) OR (名前 = ?)) AND
((? = 1 AND 年齢 IS NULL) OR (年齢 = ?)))
' DEL_Cmd.CommandText:DELETE FROM 既存テーブル
WHERE ((ID = ?) AND
((? = 1 AND 苗字 IS NULL) OR (苗字 = ?)) AND
((? = 1 AND 名前 IS NULL) OR (名前 = ?)) AND
((? = 1 AND 年齢 IS NULL) OR (年齢 = ?)))