作成日 2015.03.06
最終更新日 2015.03.06
概要
PostgreSQLデータベース・サーバのための、.NET データ・プロバイダNpgsqlのドキュメント(2014年7月25日・13改訂版)の和訳です。
旧版ドキュメント(外部サイト)
の和訳は存在しましたが、現行版のドキュメントのものは見つからなかったので和訳しました。
PostgreSQLとC#の両方を学ぶための資料集めの一環としての作成しています。
原文
npgsqlマニュアル(2014年7月25日・13改訂版)(外部サイト)
公式ページのドキュメントです。英語で書かれています。
進行中にコマンドを取り消す
Cancelling a command in progress
Npgsqlは、進行中にコマンドを取り消すために、サーバに要求することができます。これを実行するには、NpgsqlCommandのCancelメソッドを呼び出します。 他のスレッドは、要求を処理する必要があることに注意します。メイン・スレッドは、コマンドが完了するのため待機中は、遮断されるでしょう。 また、メイン・スレッドは、ユーザー取消しの結果として、例外を発生させるでしょう。 (エラーコードは57014です。)次に示すコードは、技術を説明するを参照してください。:
using System;
using System.Data;
using Npgsql;
using NpgsqlTypes;
using System.Threading;
public class c
{
// This method expects the following table in the backend:
// このメソッドは、バックエンドに次のテーブルがあることを期待します。:
/* CREATE OR REPLACE FUNCTION funcwaits() returns integer as
'
declare t integer;
begin
t := 0;
while t < 1000000 loop
t := t + 1;
end loop;
return t;
end;
'
*/
static NpgsqlConnection conn = null;
static NpgsqlCommand command = null;
public static void Main(String[] args)
{
//NpgsqlEventLog.Level = LogLevel.Debug;
//NpgsqlEventLog.LogName = "NpgsqlTests.LogFile";
//NpgsqlEventLog.EchoMessages = true;
try
{
conn = new NpgsqlConnection("Server=127.0.0.1;User id=npgsql_tests;password=npgsql_tests;");
conn.Open();
var d = new NpgsqlCommand();
var t = new Thread(new ThreadStart(CancelRequest));
command = new NpgsqlCommand("select * from funcwaits()", conn);
Console.WriteLine("Cancelling command...");
t.Start();
Console.WriteLine(command.ExecuteScalar());
conn.Close();
}
catch (NpgsqlException e)
{
if (e.Code == "57014")
Console.WriteLine("Command was cancelled");
}
}
public static void CancelRequest()
{
command.Cancel();
Console.WriteLine("command cancelled");
}
}