Firebird İçin Hazırladığım DataAccessLayer Classı

Firebird İçin Hazırladığım DataAccessLayer Classı

Daha önce ki projelerimde hazırladığım, kullandığım Firebird data işlemlerimin ve Provider’ımın bulunduğu tüm kodları sizlerle paylaşmak istiyorum. Fakat bunu yaparken kimseyi hazırcılığa alıştırma gibi bir niyetim bulunmadığını belirtmek ister, affınıza sığınarak kodları baştan sona dikkatle okuyup, anlamanızı rica ediyorum.

<pre>using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using FirebirdSql.Data.FirebirdClient;

namespace PlayStation.Data
{
public class DataAccessLayer
{
public static string InitialCatalog;
public static string UserName;
public static string Password;

public static string CreateConnString()
{
string ConnString = string.Format("ServerType=1;USER={1};PASSWORD={2};Dialect=3;DATABASE={0};Role=ADMIN;",
InitialCatalog,
UserName,
Password
);

return ConnString;
}

public static FbConnection OpenMyConnection()
{
FbConnection conn = new FbConnection(CreateConnString());
return conn;
}

public static void CloseMyConnection(FbConnection Conn)
{
Conn.Close();
Conn.Dispose();
}

public static bool ConnectionTest()
{
try
{
FbConnection conn = DataAccessLayer.OpenMyConnection();
conn.Open();
DataAccessLayer.CloseMyConnection(conn);
return true;
}
catch { return false; }
}

public int FbExecute(string query, CommandType ct, FbParameter[] sp, out string Message)
{
FbConnection conn = OpenMyConnection();
try
{
if (conn.State != System.Data.ConnectionState.Open)
conn.Open();

FbTransaction tran = conn.BeginTransaction();

FbCommand cmd = new FbCommand(query, conn, tran);
cmd.CommandType = ct;

if (sp != null)
{
for (int i = 0; i < sp.Count(); i++)
{
if (sp[i] != null)
cmd.Parameters.Add(sp.ToList()[i]);
}
}
Message = "";
int asd = cmd.ExecuteNonQuery();
tran.Commit();
return asd;
}
catch (FbException ex)
{
Message = "Bir hata oluştu. Hata kodu: " + ex.Message;
return -1;
}
finally { CloseMyConnection(conn); }
}

public DataTable GetDataTable(string query, CommandType ct, FbParameter[] sp)
{
FbConnection conn = OpenMyConnection();

FbCommand cmd = new FbCommand(query, conn);
cmd.CommandType = ct;

if (sp != null)
{
for (int i = 0; i < sp.Count(); i++)
cmd.Parameters.Add(sp.ToList()[i]);
}

using (FbDataAdapter da = new FbDataAdapter(cmd))
{
DataTable dt = new DataTable();

try
{
da.Fill(dt);
}
catch { }

cmd.Dispose();
CloseMyConnection(conn);
return (dt.Rows.Count > 0 ? dt : null);
}
}

public DataRow GetDataRow(string query, CommandType ct, FbParameter[] sp)
{
FbConnection conn = OpenMyConnection();
FbCommand cmd = new FbCommand(query, conn);
cmd.CommandType = ct;

if (sp != null)
{
for (int i = 0; i < sp.Count(); i++)
if (sp[i] != null)
cmd.Parameters.Add(sp.ToList()[i]);
}

using (FbDataAdapter da = new FbDataAdapter(cmd))
{
DataTable dt = new DataTable();
conn.Open();
da.Fill(dt);
CloseMyConnection(conn);
cmd.Dispose();
return (dt.Rows.Count > 0 ? dt.Rows[0] : null);
}
}

public string GetCell(string query, CommandType ct, FbParameter[] sp)
{
FbConnection conn = OpenMyConnection();
FbCommand cmd = new FbCommand(query, conn);
cmd.CommandType = ct;

if (sp != null)
{
for (int i = 0; i < sp.Count(); i++)
cmd.Parameters.Add(sp.ToList()[i]);
}

using (FbDataAdapter da = new FbDataAdapter(cmd))
{
DataTable dt = new DataTable();
da.Fill(dt);

cmd.Dispose();
CloseMyConnection(conn);
return (dt.Rows.Count > 0 ? dt.Rows[0][0].ToString() : string.Empty);
}
}

public bool Exists(string sqlQuery, out string Message)
{
Message = "";

FbConnection conn = OpenMyConnection();
FbCommand cmd = new FbCommand(sqlQuery, conn);
bool _exists = false;
try
{
conn.Open();
_exists = Convert.ToBoolean(cmd.ExecuteScalar());
}
catch (Exception ex)
{
Message = "Bir hata oluştu. Hata kodu: " + ex.Message;
}
finally
{
conn.Close();
cmd.Dispose();
}

return _exists;
}
}
}

Data Access Layer kodlarını okuyup anlamanız için, hangisinin ne işe yaradığını anlamak istemedim.

Yalnız dikkat edilmesi gereken husus connection string’te ki ServerType=1 değeri Firebird’ün embedded kullanılacağını belirtmektedir.

Firebird ile database oluşturmak istiyorsanız eğer IBExpert veya EMS Sql Manager for Interbase & Firebird kullanılabilir.

Download linkinin içerisinde Firebird 2.5 versiyonuna uygun hem embedded dll’leri, hem provider’ı hem de kullanımı anlatan bir video bulabilirsiniz.

Firebird’ün özelliklerinde ise tablo başına 2 GB veriye kadar sorunsuz çalıştığı belirtilmekte. Performans olarak hiçbir sorun yaşamayacağınız, yayımlama (deployment) işlemlerinde ise ek kurulum gerektirmediğinden çalıştığından dolayı çok rahat hareket edebilirsiniz.

Provider’ı aşağıda ki linkten indirebilirsiniz.

http://yazilimcinotlari.com/FirebirdProvider.rar

İyi çalışmalar, bol kodlu günler

1,891 total views, 1 views today

No Comments

Leave a Comment

Ulaşım için: Facebook: /ganigani Twitter: @abdulgani_demir


*

%d blogcu bunu beğendi: