15.11.6 繰返し列の実行
表exの2列目に「123」,「456」,及び「NULL」を挿入する例を次に示します。
プログラム例はVisual C# .NETで記述していますが,Visual Basic.NETでもほぼ同じ内容です。必要に応じて,読み替えてください。
// 接続オブジェクトなどを作成する HiRDBConnection pConn = new HiRDBConnection("接続文字列"); HiRDBCommand pCom = pConn.CreateCommand(); // DBに接続する pConn.Open(); // 表を作成する pCom.CommandText = "create table ex(a int,b char(10) array[3])"; pCom.ExecuteNonQuery(); // パラメタオブジェクトを作成する HiRDBParameter pPar1 = pCom.CreateParameter(); HiRDBParameter pPar2 = pCom.CreateParameter(); // パラメタの設定をする pPar1.Direction = ParameterDirection.Input; pPar1.HiRDBType = HiRDBType.Integer; pPar1.Value = 1; pPar2.Direction = ParameterDirection.Input; pPar2.HiRDBType = HiRDBType.Char; pPar2.Size = 10; object [] aValue = new object[3]; aValue[0] = "abc"; aValue[1] = "def"; aValue[2] = null; pPar2.Value = aValue; // 表exの列aの最大要素数を設定する pPar2.Repetition =3; pCom.Parameters.Add(pPar1); pCom.Parameters.Add(pPar2); // パラメタを使用してSQL文を実行する pCom.CommandText = "insert into ex values(?,?)"; pCom.ExecuteNonQuery(); // select文を実行する pCom.CommandText = "select * from ex"; HiRDBDataReader pReader = pCom.ExecuteReader(); // フェッチする pReader.Read(); // 1列目のデータを取得する if(!pReader.IsDBNull(0)) { Console.WriteLine("1列目の値は" + pReader.GetInt32(0)); } else { Console.WriteLine("1列目の値はNULL"); } // 2列目(繰返し列)のデータを取得する if(!pReader.IsDBNull(1)) { for (int i = 0; i < pReader.GetFieldArrayCount(1); i++) { if (!pReader.IsDBNull(1, i)) { Console.WriteLine("2列目の" + (i+1) + "番目の要素は"+ pReader.GetValue(1, i)); } else { Console.WriteLine("2列目の" + (i+1) + "番目の要素は NULL"); } } } else { Console.WriteLine("2列目の値はNULL"); } // カーソルクローズ pReader.Close(); // DBから切断する pConn.Close(); pConn.Dispose();
- [説明]
-
-
valueにobject配列を設定するのは,配列を使用したINSERT文と同じです。繰返し列の場合,更に拡張プロパティRepetitionを設定します。これには繰返し列の数を指定します。そのため,SQL実行時の引数は必要ありません。
-
FETCHの場合,DataReaderにも繰返し列のための拡張メソッドが用意されています。まず,FETCHしたデータの繰返し列の個数をGetFieldArrayCountで取得します。さらに,FETCHしたデータの値をGetValueの:overloadで取得します。第2引数には繰返し列の列番号を指定します。また,このメソッドと等価なインデクサ[int,int]も用意しています。
-
- 注
-
繰返し列の使用方法は,配列を使用したINSERT機能に似ています。異なるのは,パラメタに繰り返し回数を指定する部分と,SQL文を実行する部分です。