Fonksiyonları kullanarak C # ve PostgreSQL kullanarak temel CRUD PostgreSQL SQL Server gibi diğer veritabanlarında bulunan saklı yordam oluşturma geleneksel
şekilde desteklemiyor, Oracle vb ünlü oluşturun Usulü sözdizimi yoksundur. Ancak, biz functions.We yardımıyla yapabilirsiniz saklı yordamlar bir fonksiyon
yapamaz birden çok sonuç kümeleri döndüren biliyorum. PostgreSQL biz refcursors bir dizi returing yapabilirsiniz. Bu yazıda önceki örnekte uzatarak bunu
nasıl bakacağız Önce bize ilk önceki örnekte bulunan Player tablo (tblOyuncular) oluşturmak environment.Let yaratacak
CREATE TABLE tblOyuncular (
OyuncuAdi Varchar(50)
,Para Int
,Uyelikleri Varchar(50)
,Yas Int
);
Sonraki bize altında gibi fonksiyonlar oluşturmasına izin Tüm Kayıt Fonksiyonu seçin oluşturma
CREATE OR REPLACE FUNCTION fnFetchPlayerRecord() RETURNS SETOF refcursor AS
'DECLARE
recordSet refcursor;
BEGIN
OPEN recordSet FOR
Select * from tblOyuncular;
RETURN NEXT recordSet ;
RETURN;
END;'
LANGUYAS plpgsql;
Biz dönüş türü refcursor olduğunu öğrenebilirsiniz. Bu şekilde dil türü plpgsql olduğunu client.Also geri rekor setleri gönderebilirsiniz İşlev Ekle'yi oluşturma
CREATE OR REPLACE FUNCTION fnInsertRecord(varchar,int,varchar,int) RETURNS void AS
'BEGIN
Insert Into tblOyuncular(OyuncuAdi,Yas,Uyelikleri,Para) values ($1,$2,$3,$4);
END;'
LANGUYAS plpgsql;
Ikinci ve dördüncü tamsayıdır tipi ve döner void iken, bu fonksiyonu Varchar tip 4 parameters.The birinci ve üçüncü bir varlık kabul eder.Değerleri konumsal
parametre (örneğin $ 1, $ 2, vb) kullanılarak sıkıştırılan gözlemleyin. Biz sadece veri türü söz, PostgreSQL biz adı Parametreler ve type.But, bu
veritabanlarında CREATE PROCEDURE deyimi ilan zamanında parametresi name.Also kullanarak bunu nereye Oracle veya SQL Server farklı yeterlidir Güncelleme
Fonksiyonu oluşturma
CREATE OR REPLACE FUNCTION fnUpdateRecord(varchar,int) RETURNS void AS
'BEGIN
Update tblOyuncular Set Para = Para + $2 Where OyuncuAdi = $1;
END;'
LANGUYAS plpgsql;
Silme Fonksiyonu oluşturma
CREATE OR REPLACE FUNCTION fnDeleteRecord(varchar) RETURNS void AS
'BEGIN
Delete From tblOyuncular Where OyuncuAdi = $1;
END;'
LANGUYAS plpgsql;
Yani, bizim operasyon için temel komut her türlü yazdım Şimdi öncelikle bir başvuru eklemek gerekir bizim DAL layer.We içinde arayüz koduna bakacağız
1.Mono.Security.dll 2.Npgsql.dll Şimdi biz DAL katmanı bu işlevleri çağırmak nasıl gibi bakacağız Öncelikle bize nasıl (1. işlev) fnFetchPlayerRecord
fonksiyonu çağırıyoruz içine bakalım
public DataTable GetAllRecords()
{
DataTable dtRecord = new DataTable();
try
{
using (NpgsqlConnection pgsqlConnection = new NpgsqlConnection(connString))
{
// Open the PgSQL Connection.
pgsqlConnection.Open();
string selectCommand = "fnFetchPlayerRecord";
using (NpgsqlCommand pgsqlcommand = new NpgsqlCommand(selectCommand, pgsqlConnection))
{
using (NpgsqlTransaction tran = pgsqlConnection.BeginTransaction())
{
pgsqlcommand.CommandType = CommandType.StoredProcedure;
using (NpgsqlDataAdapter Adpt = new NpgsqlDataAdapter(pgsqlcommand))
{
Adpt.Fill(dtRecord);
}
tran.Commit();
}
}
}
}
catch (NpgsqlException ex)
{
throw ex;
}
catch (Exception ex)
{
throw ex;
}
return dtRecord;
}
Bunu biliyoruz, diğer databases.Since ile arabirim ise bulduğumuz gibi preety kadar aynı kodu, bizim fonksiyon biz DataSet.We gelen refcursor işlevi
tarafından döndürülen imleçler önlemek için işlem kullanıyorsanız kullanabilirsiniz Biz başka DataTable kullanıyorsanız sadece bir kayıt kümesi
döndürürimplicity işlem sonrasında kapanış NpgsqlCommand sınıfının CommandText finished.In, biz işlev adı belirterek edilir. Sonraki biz Ekle fonksiyonu (fnInsertRecord) çağırmak için bir yol göreceksiniz
public void InsertRecord(string OyuncuAdi, int Yas, string Uyelikleri, int Para)
{
try
{
using (NpgsqlConnection pgsqlConnection = new NpgsqlConnection(connString))
{
// Open the PgSQL Connection.
pgsqlConnection.Open();
string insertCommand = "fnInsertRecord";
using (NpgsqlCommand pgsqlcommand = new NpgsqlCommand(insertCommand, pgsqlConnection))
{
using (NpgsqlTransaction tran = pgsqlConnection.BeginTransaction())
{
pgsqlcommand.CommandType = CommandType.StoredProcedure;
pgsqlcommand.Parameters.Add(new NpgsqlParameter("OyuncuAdi", NpgsqlDbType.Varchar));
pgsqlcommand.Parameters.Add(new NpgsqlParameter("Yas", NpgsqlDbType.Integer));
pgsqlcommand.Parameters.Add(new NpgsqlParameter("Uyelikleri", NpgsqlDbType.Varchar));
pgsqlcommand.Parameters.Add(new NpgsqlParameter("Para", NpgsqlDbType.Integer));
pgsqlcommand.Parameters[0].Value = OyuncuAdi;
pgsqlcommand.Parameters[1].Value = Yas;
pgsqlcommand.Parameters[2].Value = Uyelikleri;
pgsqlcommand.Parameters[3].Value = Para;
pgsqlcommand.ExecuteNonQuery();
tran.Commit();
}
}
}
}
catch (NpgsqlException ex)
{
throw ex;
}
catch (Exception ex)
{
throw ex;
}
}
Bu, bir önceki gibi benzer bir kavram aşağıdaki Diğer DML işlevleri aynı desen izler. Çıkışı olacaktır altında olarak