Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


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();
[説明]
  1. valueにobject配列を設定するのは,配列を使用したINSERT文と同じです。繰返し列の場合,更に拡張プロパティRepetitionを設定します。これには繰返し列の数を指定します。そのため,SQL実行時の引数は必要ありません。

  2. FETCHの場合,DataReaderにも繰返し列のための拡張メソッドが用意されています。まず,FETCHしたデータの繰返し列の個数をGetFieldArrayCountで取得します。さらに,FETCHしたデータの値をGetValueの:overloadで取得します。第2引数には繰返し列の列番号を指定します。また,このメソッドと等価なインデクサ[int,int]も用意しています。

繰返し列の使用方法は,配列を使用したINSERT機能に似ています。異なるのは,パラメタに繰り返し回数を指定する部分と,SQL文を実行する部分です。