記事
· 11 hr 前 4m read

ADO.NET Managed Provider を使用してクラスクエリを実行し、結果セットを取得するサンプル

先日、お客様よりタイトルのご質問をいただき、サンプルコードを作成しました。せっかくですので、こちらでも共有したいと思います。

今回は、データベースの空き容量情報を取得する、%SYS.DatabaseQueryクラスのFreeSpaceクエリを使用したサンプルとします。

C#.Net と VB.Net で作成してみました。


★C#.Net

using System;
using InterSystems.Data.IRISClient;
{
    class Program
    {
        static void Main(string[] args)
        {
            IRISConnection IRISConnect = new IRISConnection();
            IRISConnect.ConnectionString = "Server=localhost;Port=1972;Namespace=USER;User ID=_SYSTEM;Password=SYS";
            IRISConnect.Open();
            String queryString = "select * from %SYS.DatabaseQuery_FreeSpace(?)";
            IRISCommand cmd = new IRISCommand(queryString, IRISConnect);
            IRISParameter p1 = new IRISParameter("Mask", IRISDbType.NVarChar);
            p1.Value = "*";
            cmd.Parameters.Add(p1);
            IRISDataReader Reader = cmd.ExecuteReader();
            while (Reader.Read())
            {
                // Select values : DatabaseName:0, Directory:1, MaxSize:2, Size:3, ExpansionSize:4, Available:5, %Free:6, DiskFreeSpace:7, Status:8, SizeInt:9, AvailableNum:10, DiskFreeSpaceNum:11, ReadOnly:12
                Console.WriteLine(Reader.GetValue(0).ToString() + ", " + Reader.GetValue(3).ToString() + ", " + Reader.GetValue(5).ToString());
            }
            Reader.Close();
            cmd.Dispose();
            IRISConnect.Close(); 
        }
    }
}


★VB.Net

Imports System
Imports InterSystems.Data.IRISClient

Module Program
    Sub Main(args As String())
        Dim conn As New IRISConnection
        conn.ConnectionString = "Server=localhost;Port=1972;Namespace=USER;User ID=_SYSTEM;Password=SYS"
        conn.Open() 
        Dim queryString As String = "select * from %SYS.DatabaseQuery_FreeSpace(?)"
        Dim cmd As IRISCommand = New IRISCommand(queryString, conn)
        Dim p1 As IRISParameter = New IRISParameter("Mask", "*")
        cmd.Parameters.Add(p1)
        Dim reader As IRISDataReader = cmd.ExecuteReader()
        Do While (reader.Read())
            '' Select values : DatabaseName : 0, Directory:1, MaxSize:2, Size:3, ExpansionSize:4, Available:5, %Free:6, DiskFreeSpace:7, Status:8, SizeInt:9, AvailableNum:10, DiskFreeSpaceNum:11, ReadOnly:12
            Console.WriteLine(reader.GetValue(0).ToString() + ", " + reader.GetValue(3).ToString() + ", " + reader.GetValue(5).ToString())
        Loop 
        reader.Close()
        cmd.Dispose()
        conn.Close()
    End Sub
End Module


※参照の追加手順

Visual Studioの [プロジェクト] > [プロジェクト参照の追加] をクリックします
参照マネージャにて、参照より以下を追加します(.Netのバージョンにあわせて選択してください)
例)C:\InterSystems\IRIS\dev\dotnet\bin\net8.0\InterSystems.Data.IRISClient.dll


なお、ストアドプロシージャ(ストアド)の場合も、同様に実行することが可能です。

ともに、 SqlProc キーワードを指定して、SQL ストアドプロシージャとして呼び出すことができるようにする必要があります。

例(クラスクエリのサンプル):select * from Sample.SP_Sample_By_Name(?)

Query ByName(name As %String = "") As %SQLQuery(CONTAINID = 1, SELECTMODE = "RUNTIME") [ SqlName = SP_Sample_By_Name, SqlProc ]
{
SELECT ID, Name, DOB, SSN
FROM Sample.Person
WHERE (Name %STARTSWITH :name)
ORDER BY Name
}


例2(ストアドプロシージャのサンプル):select * from Sample.Stored_Procedure_Test(?,?)

ClassMethod StoredProcTest(name As %String, ByRef response As %String) As %Integer [ SqlName = Stored_Procedure_Test, SqlProc ]
{
    // Set response to the concatenation of name.
    Set response = name _ "||" _ name
    QUIT 29
}


ご利用の機会がありましたら、ぜひ参考になさってください。

以下のドキュメントもあわせてご覧ください。
ADO.NET Managed Provider の使用法
InterSystems IRIS デモ : ADO.NET を使用した接続

ディスカッション (0)0
続けるにはログインするか新規登録を行ってください