|
SQL'de Tarih Kullanımı |
|
Gönderiliyor lütfen bekleyin... |
|
|
Bilişim sektörünün
gelişmesinde en önemli faktörlerden bir tanese de rekabettir. Rekabet ile var
olan ve büyük diye adlandırdığımız firmalar ihtiyaçlara farklı çözümler bularak
var olan pastadan daha büyük pay almaya çalışırlar.Fakat bu farklı çözümleri
oluştururken standartlara uymaktan vaz geçip kendi standartlarını yaratarak
müşteriyi kendilerine bağımlı kılmayı yeğlerler.
Standarlara
uymama sorunu genellikle veritabanlarında karşımıza çıkıyor. Veritabalarında
veri tipleri ve sintakslarının farklı olması bizi veritabanı bağımlı kod yazmak
zorunda bırakır.Veri tabanlarında kod içinde dönüşümü ve kullanılması en güç
veri tipi tarih tipleridir. Bu makalemizde C# programa dili ile Oracle , MS
SQL Server ve Access gibi sık kullandığımız veritabanlarında tarih kullanımını
inceleyeceğiz.
Öncelikle
kullanıcı arayüzünden veritabanına gönderilmesini inceleyelim. Access , MS SQL
Server yada Oracle databasezlerinde tablomuzu oluşturalım.Tablomuz aşağıdaki
alanlarda oluşsun.
ID integer,
ADI
varchar(50)
DOGUM_TARIHI
Veri tabanı bağlantısını sağlamak için Baglatı fonksiyonunu oluşturalım.
public
static OleDbConnection Baglanti(){
stringProvider="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Database\\deneme.mdb";
//Provider="Provider=SQLOLEDB;data source=localhost;initial catalog=deneme;integrated
security=sspi";
//Provider="Provider=OraOLEDB.Oracle.1;data source=spatial.deneme.com.tr;User
ID=deneme;Password = deneme";
OleDbConnection myConnection = new OleDbConnection();
myConnection.ConnectionString = Provider;
if(myConnection.State == ConnectionState.Closed || myConnection == null)
myConnection.Open();
return myConnection;
}
|
Kodl
1: Veri tabanı bağlantıs
Veri
tabanları için oluşturduğumuz tarih fonksiyonlarını oluşturalım.Kullanacağınız
veritabanına göre hangisini çağırmak istediğinize kod içerisinde karar verebilirsiniz.
//Oracle
için kullanabileceğiniz Fonksiyon
public static string DateTime_forOracle(DateTime value)
{
if(value==Convert.ToDateTime("01.01.0001"))
return "NULL";
else
return "TO_DATE(’" + Convert.ToDateTime(value).ToString("dd-MM-yyyy")
+ "’,’dd.mm.yyyy’)";
}
//Microsoft
SQL Server için Fonksiyon
public static string DateTime_forSQLServer(DateTime
value)
{
if(value==Convert.ToDateTime("01.01.0001"))
return "NULL";
else
//smalldatetime tipi kullanıma göre değiştirilebilir
return "Convert(smalldatetime,’" + Convert.ToDateTime(value).ToString("MM-dd-yyyy")
+ "’)";
}
//Access
için kullanabileceğiniz Fonksiyon
public static string DateTime_forAccess(DateTime value)
{
if(value==Convert.ToDateTime("01.01.0001"))
return "NULL";
else
{
string Time = "";
Time = value.ToString("#MM/dd/yyyy#");
Time = Time.Replace(".","/");
return Time;
}
|
Kod 2: Fonksiyonlar
Yukarıda
yazdığımız fonksiyonları bir sınıfta birleştirirsek bir nevi kendi kutuphanemizi
oluşturmuş oluruz.
using System;
using System.Data;
using System.Data.OleDb;
namespace
TarihDonusturme
{
/// <summary>
/// Summary description for Fonksiyonlar.
/// </summary>
public class Fonksiyonlar
{
public static OleDbConnection Baglanti()
{
stringProvider="";Provider="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=
C:\\Database\\BELOTOM.mdb";</P> < Palign=left> <
/FONT>
//Provider="Provider=SQLOLEDB;data
source=localhost;initial catalog=deneme;integrated security=sspi";
//Provider="Provider=OraOLEDB.Oracle.1;data source=spatial.borat.com.tr;User
ID=belotom;Password = belotom";
OleDbConnection myConnection = new OleDbConnection();
myConnection.ConnectionString = Provider;
if(myConnection.State == ConnectionState.Closed ||
myConnection == null)
myConnection.Open();
return myConnection;
}
//Oracle
için kullanabileceğiniz Fonksiyon
public static string DateTime_forOracle(DateTime value)
{
if(value==Convert.ToDateTime("01.01.0001"))
return "NULL";
else
return "TO_DATE(’" + Convert.ToDateTime(value).ToString("dd-MM-yyyy")
+ "’,’dd.mm.yyyy’)";
}
//Access için kullanabileceğiniz Fonksiyon
public static string DateTime_forAccess(DateTime value)
{
if(value==Convert.ToDateTime("01.01.0001"))
return "NULL";
else
{
string Time = "";
Time = value.ToString("#MM/dd/yyyy#");
Time = Time.Replace(".","/");
return Time;
}
}
//Microsoft
SQL Server için Fonksiyon
public static string DateTime_forSQLServer(DateTime value)
{
if(value==Convert.ToDateTime("01.01.0001"))
return "NULL";
else//smalldatetime tipi kullanıma
göre değiştirilebilir
return "Convert(smalldatetime,’" +
Convert.ToDateTime(value).ToString("MM-dd-yyyy") + "’)";
}
}
}
|
Kod 2: Fonksiyonların birleştirilmesi
Sorgulama
yapabileceğimiz örnek bir sınıf (class) oluşturalım.Deneme sınıfında private
değişkenler, public değişkenler, yapıcılar ve tarih fonksiyonunu gibi kullanacağımız
fonksiyonlar yer almakta.
using
System;
using System.Data;
using System.Data.OleDb;
namespace
TarihDonusturme
{
/// <summary>
/// Summary description for Deneme.
/// </summary>
// Deneme Classı
public class DENEME
{
// private değişkenlerimiz
private System.Int32 _ID;
private System.String _ADI;
private System.DateTime _DOGUM_TARIHI;
// public değişkenlerimiz
public System.Int32 ID
{
get{return _ID;}
}
public System.String ADI
{
get{return _ADI.Trim();}
set{_ADI= value;}
}
public System.DateTime DOGUM_TARIHI
{
get{return _DOGUM_TARIHI;}
set{_DOGUM_TARIHI= value;}
}
//
Yapıcılarımız(constructors)
public DENEME()
{
Yeni();
}
//
Private fonksiyonlar
private void Yeni() {
_ID = 0;
_ADI = "";
_DOGUM_TARIHI = Convert.ToDateTime("01.01.0001");}
public static DENEME[] TarihSorgula( System.DateTime Ilk_Tarih , System.DateTime
SonTarih)
{
//Kullanacağımız database göre
tarih fonksiyonunu değiştiebiliriz
string SQL = "SELECT * FROM DENEME WHERE DOGUM_TARIHI >="+Fonksiyonlar.DateTime_forAccess(Ilk_Tarih)
+" AND DOGUM_TARIHI<="+Fonksiyonlar.DateTime_forAccess(SonTarih);
System.Data.OleDb.OleDbDataAdapter _Adapter=new System.Data.OleDb.OleDbDataAdapter();
_Adapter.SelectCommand=new System.Data.OleDb.OleDbCommand(SQL);
_Adapter.SelectCommand.Connection=Fonksiyonlar.Baglanti();
System.Data.DataTable _Table=new System.Data.DataTable();
_Adapter.Fill(_Table);
DENEME[] _Deneme = new DENEME[_Table.Rows.Count];
for(int i =0 ; i <_Table.Rows.Count ;i++)
{
_Deneme[i] = new DENEME();
_Deneme[i]._ID = Convert.ToInt32(_Table.Rows[i]["ID"]);
_Deneme[i]._ADI = Convert.ToString(_Table.Rows[i]["ADI"]);
_Deneme[i]._DOGUM_TARIHI = Convert.ToDateTime(_Table.Rows[i]["DOGUM_TARIHI"]);
}
return _Deneme;
}
}
}
|
Kod
3: Deneme adlı sınıf üzerinde SQL cümlesi ve tarih fonksiyonunu kullanılması
Son
olarak ta yapmış olduğumuz fonksiyonların çalışması için örnek bir form
oluşturalım.
private
void button1_Click(object sender, System.EventArgs e) {
try
{
DENEME[]
_TempList ;
_TempList = DENEME.TarihSorgula(Convert.ToDateTime(textBoxIlk_Tarih.Text),Convert.ToDateTime
(textBoxSon_Tarih.Text));
listViewListe.Items.Clear();
ListViewItem _li;
for(int i = 0 ; i < _TempList.Length ;i++)
{
_li = new ListViewItem();
_li.Text = _TempList[i].ID.ToString();
listViewListe.Items.Add(_li);
_li.SubItems.Add(_TempList[i].ADI);
_li.SubItems.Add(_TempList[i].DOGUM_TARIHI.ToString());
}
}
catch(Exception
ex) { MessageBox.Show(ex.Message); }
}
|
Kod
4:Sorgula buttonunun altına yazacağımız kod.
Bu
ve buna benzer fonksiyonlar diğer kullanılan veritabanları için de yapılabilir.
Böylelikle bizi zaman kaybından ve zorluklardan birazda olsa kurtarmış olur .
Makale:
SQL'de Tarih Kullanımı ADO.NET ve SQL Feryat Olcay
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|