先日、お客様よりタイトルのご質問をいただき、サンプルコードを作成しました。せっかくですので、こちらでも共有したいと思います。
今回は、データベースの空き容量情報を取得する、%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(?)"; // call %SYS.DatabaseQuery_FreeSpace(?) でもOK 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(?)" ''call %SYS.DatabaseQuery_FreeSpace(?) でもOK 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
なお、ストアドプロシージャ(ストアド)の場合も、同様に実行することが可能です。
ともに、
例(クラスクエリのサンプル):select * from Sample.SP_Sample_By_Name(?) または call 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(ストアドプロシージャのサンプル):call 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
}
例2 の場合は以下のような C# コードになります(一部省略)
String queryString = "? = call Sample.Stored_Procedure_Test(?,?)"; IRISCommand cmd = new IRISCommand(queryString, IRISConnect); IRISParameter p1 = new IRISParameter(); p1.Direction = ParameterDirection.ReturnValue; p1.IRISDbType = IRISDbType.Int; IRISParameter p2 = new IRISParameter(); p2.Direction = ParameterDirection.Input; p2.Value = "InterSystemsJapan"; IRISParameter p3 = new IRISParameter(); p3.Direction = ParameterDirection.Output; cmd.Parameters.Add(p1); cmd.Parameters.Add(p2); cmd.Parameters.Add(p3); cmd.ExecuteReader(); Console.WriteLine("Return value = " + p1.Value + ", " + "ByRef response = " + p3.Value);
ご利用の機会がありましたら、ぜひ参考になさってください。
以下のドキュメントもあわせてご覧ください。
ADO.NET Managed Provider の使用法
InterSystems IRIS デモ : ADO.NET を使用した接続