作成日 2015.03.06
最終更新日 2015.03.06
概要
PostgreSQLデータベース・サーバのための、.NET データ・プロバイダNpgsqlのドキュメント(2014年7月25日・13改訂版)の和訳です。
旧版ドキュメント(外部サイト)
の和訳は存在しましたが、現行版のドキュメントのものは見つからなかったので和訳しました。
PostgreSQLとC#の両方を学ぶための資料集めの一環としての作成しています。
原文
npgsqlマニュアル(2014年7月25日・13改訂版)(外部サイト)
公式ページのドキュメントです。英語で書かれています。
大規模なオブジェクトをサポートする作業
Working with large object support
このサンプルは、上記のbyteaコードに、ほとんど同じです。 それは、取り出されたファイルをPostgresqlに格納します。 そして、その次に、後で、それを削除します。 byteaサンプルと同様に、それは、「database」接尾辞でファイルを書き込みます。
using System;
using System.Data;
using Npgsql;
using NpgsqlTypes;
using System.IO;
public class c
{
public static void Main(String[] args)
{
NpgsqlConnection newconn = new NpgsqlConnection("server=localhost;user id=npgsql_tests;password=npgsql_tests");
newcon.Open();
NpgsqlTransaction t = newcon.BeginTransaction();
LargeObjectManager lbm = new LargeObjectManager(newcon);
int noid = lbm.Create(LargeObjectManager.READWRITE);
LargeObject lo = lbm.Open(noid,LargeObjectManager.READWRITE);
FileStream fs = File.OpenRead(args[0]);
byte[] buf = new byte[fs.Length];
fs.Read(buf,0,(int)fs.Length);
lo.Write(buf);
lo.Close();
t.Commit();
t = newcon.BeginTransaction();
lo = lbm.Open(noid,LargeObjectManager.READWRITE);
FileStream fsout = File.OpenWrite(args[0] + "database");
buf = lo.Read(lo.Size());
fsout.Write(buf, 0, (int)lo.Size());
fsout.Flush();
fsout.Close();
lo.Close();
t.Commit();
DeleteLargeObject(noid);
Console.WriteLine("noid: {0}", noid);
newcon.Close();
}
public static void DeleteLargeObject(Int32 noid)
{
NpgsqlConnection conn = new NpgsqlConnection("server=localhost;user id=npgsql_tests;password=npgsql_tests");
newcon.Open();
NpgsqlTransaction t = newcon.BeginTransaction();
LargeObjectManager lbm = new LargeObjectManager(newcon);
lbm.Delete(noid);
t.Commit();
newcon.Close();
}
}
他の例では、Mirekによって与えられます(mirek at mascort dot com dot pl), 大規模なオブジェクトを使用することは、データベースから画像を取得し、 クライアント上でフォ-ムで、それを表示することをサポートしています。
using System;
using Npgsql;
using NpgsqlTypes;
using System.Drawing;
using System.IO;
// metod whos take picture oid from database
// metod whosは、データベースから画像 oid を取得します
public int takeOID(int id)
{
// it's a metod whos connect to database and return picture oid
// それは、whos metodがデータベースに接続し、画像oidを返します。
BazySQL pir = new BazySQL(Login.DaneUzera[8]);
string pytanko = String.Format("select rysunek from k_rysunki where idtowaru = " + idtowaru.ToString());
string[] wartosci = pir.OddajSelectArray(pytanko);
int liczba = int.Parse(wartosci[0].ToString());
return liczba;
}
// take a picture from database and convert to Image type
// データベースから画像を取得し、画像型に変換します
public Image pobierzRysunek(int idtowaru)
{
NpgsqlConnection Polacz = new NpgsqlConnection();
Polacz.ConnectionString = Login.DaneUzera[8].ToString(); //its metod whos return connection string
Polacz.Open();
NpgsqlTransaction t = Polacz.BeginTransaction();
LargeObjectManager lbm = new LargeObjectManager(Polacz);
LargeObject lo = lbm.Open(takeOID(idtowaru),LargeObjectManager.READWRITE); //take picture oid from metod takeOID
byte[] buf = new byte[lo.Size()];
buf = lo.Read(lo.Size());
MemoryStream ms = new MemoryStream();
ms.Write(buf,0,lo.Size());
lo.Close();
t.Commit();
Polacz.Close();
Polacz.Dispose();
Image zdjecie = Image.FromStream(ms);
return zdjecie;
}
// next I just use this metod
// 次に、ただ、私はこのmetodを使用します
pictureBox1.Image = Image pobierzRysunek(1);