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文を実行する部分です。