ADO.NET’TE CONNECTED DİSCONNECTED MİMARİLER

26 Temmuz 2010 – 14:58 Yazar: Derya GUNDUZ

ADO.NET  teknolojisi ile veritabanından veri çekmenin 2 yolu vardır.

  • Connected Mimari
  • Disconnected Mimari

Connected Mimari:

Bu mimaride veri tabanından veri çekme süresi boyunca uygulama veritabanına bağlı kalır ve bilgiler bağlı kalma süresi boyunca çekilebilir.Veri çekmek için veritabanına sürekli bağlı olması zorunluluğundan dolayı sql server sürekli meşgul olur,bu bir dezavantajdır.Connected ile veri çekebilmek için SqlCommand ile ConnectionString yazılır ve veriler SqlDataReader ile okunur.SqlDataReader ile veriler tek tek okunur,bu da bir dezavantaj sayılabilir.Connected mimarinin güzel yönlerinden bir tanesi sqlden alınan verilerin daima en güncel veriler olmasıdır,yapılan  bütün değişikler direk veritabanına yansıdığı için veri alınacağı zaman da en güncel veriler gelir.Connected yapıda disconnected yapıya göre veriler daha  hızlı çekilir(datareaderden dolayı)

 

Disconnected Mimari:

Bu mimaride uygulama sqle bağlı olmaz,bağlı olmadan veriler çekilir.Peki nasıl oluyor da bağlı olmadığı halde veritabanından veri çekebiliyor?Uygulamanın veritabanına bağlı olmadan veri çekmesini sağlayan yapı SqlDataAdapterdır.Disconnected mimaride  SqlDataAdapter nesnesi oluşturulur ve bu aracı nesne sayesinde veri tabanından veri çekilir,bütün bağlantılar bunun üzerinden yapılır.Uygulama veritabanına hiç bağlanmadığı için de buna  disconnected yapı denilmiş.Disconnected mimaride bağlantı açılıp kapanmaz,SqlDataAdapter bağlantıyı kendisi açar kapatır.DataAdaptör üzerindeki sql verileri datatable ve datasetlere doldurulur(fill).Böylece sqldeki veriler kullanıma hazırdır.

DataTable—->bellek üzerindeki tablodur

DataSet——>bellek üzerindeki datatablelardır(oluşturulan datatablelar datasete atılır)

Disconnected yapıda uygulama veritabanına bağlı olmadığı için veritabanını meşgul etmek anlamında connected yapıdan daha iyidir.Ama disconnected yapı connected yapıya göre daha eski bilgiyi getirir,veritabanı üzerindeki değişiklikler direk veritabanına yansımadığı için en güncel veriye ulaşamıyor.Databasede yapılan değişikler biz istediğimiz zaman veritababnına yansır.

DERYA GÜNDÜZ

deryagunduz.blogspot.com

deryagunduz47@gmail.com

Bookmark and Share

C#’DA SQLDEN VERİ ÇEKME-LİSTVİEW’E YAZDIRMA

21 Temmuz 2010 – 16:28 Yazar: Derya GUNDUZ

Ado.net teknolojisi sayesinde .net applicationdan database ulaşıp orada veri çekebiliyoruz.Bu vereceğim örnekte de C# veri tabanından sql veri tabanına bağlanıp ordaki Northwind veri tabanında bilgi alıp listviewe yazdıracaz.Bu yayınlayacağım örnek kod BilgeAdam’da staj yaparken girdiğim derslerde gördüğümüz örneklerden.

Önce form disaynını yapmalıyız,

-listview eklemeliyiz

-listviewın view propetysini “details” yapmalıyız,

-”edit colonms” seçeneğinden iki kolon ekleyip bu kolanlara “ürün adi” “fiyat”  adlarını vermeliyiz,

-kodlama kısmına geçebiliriz

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Data.SqlClient;            //sql ile bağlantı kurmak için gerekli kütüphane

namespace AdoConnected1

{

public partial class Form2 : Form

{

public Form2()

{

InitializeComponent();

}

private void Form2_Load(object sender, EventArgs e)

{

//server=server name   database=database name

//integrated security=true     windows authenticationda çalışıldığını gösterir

SqlConnection conn = new SqlConnection(”server=DERYA-PC\\SQLEXPRESS;database=Northwind;integrated security=true”);

//komut nesnesi

SqlCommand cmd = new SqlCommand(”select ProductName,UnitPrice from Products”,conn);

SqlDataReader dr;

conn.Open();

dr = cmd.ExecuteReader();//komudu çalıştır execute okusun

string urunAdi;

decimal fiyat;

while (dr.Read())

{

urunAdi = dr.GetString(0);//0. kolon

fiyat = dr.GetDecimal(1);//2. kolon

ListViewItem Ivi = new ListViewItem();

//ListView e ekleme yapmak için itemından nesne oluşturup ona ekliyoruz

Ivi.Text = urunAdi;     //text ilk kolon

Ivi.SubItems.Add(fiyat.ToString());  //ondan sonraki bütün kolonlar subitem oluyor

listView1.Items.Add(Ivi);

}

}

}

}

DERYA GÜNDÜZ

Bookmark and Share

Visual Studio 2008 Design Mode Problem

17 Temmuz 2010 – 12:23 Yazar: Uğur ERDEM

Merhaba,

Visual studio 2008 html editore gecince problem almaya başladıysanız. Bu yeni yüklediğiniz office 2010 dan kaynaklanıyor olabilir. Nedendir bilinmez ama office 2007 den 2010 ‘a gectikten sonra vs 2008 in html source ve design kısımlarında problem oluştu şöyleki, vs 2008 de bir web projesi açıyorum ve sonrasında codebehind ile işlem yapmamda bir problem çıkarmıyor fakat source kısma yani html editor veya design kısmına geçtiğimde vs 2008 dokunup kalıyor.

Kullandığım bir eklentinin buna neden olabileceğini düşündüm ve eklentiyi kaldırdım. fakat vs 2008 düzelmedi sonrasında vs 2008 tamamen kaldırdım ve yeniden kurdum, ama sonuç sadece kaybettiğim zaman oldu. Bugün bir blogta bunun office 2010 ile alakalı olduğunu gördüm ve çözüm için  gösterdiği yolları yaptım. Vs 2008 im düzeldi.ilginçtirki bu olayla sadece office 2007 den 2010 gecince karşılaşılıyormuş. Belki sizde aynı hatayı alıyorsunuzdur diye çözüm yollarını sizinle paylaşıyorum.

Windows 64bit

C:\Program Files (x86)\Common Files\microsoft shared\OFFICE12\Office Setup Controller\Setup.exe

Windows 32bit

C:\Program Files\Common Files\microsoft shared\OFFICE12\Office Setup Controller\Setup.exe

bulunan dosyaları çalıştırıyoruz ve sonrasında repair / tamir et deyip işlemimizi tamamlıyoruz. Eğer bunu program ekle kaldırdan yapmak istersenizde , Microsoft Visual Studio Web Authoring Component e change / değiştir seçip repair / tamir et de diyebilirsiniz.

Benim yaralandığım kaynağa buradan ulaşabilirsiniz.

Bookmark and Share

SQL’DE TRIGGERLAR(TETİKLEYİCİLER)

06 Temmuz 2010 – 01:45 Yazar: Derya GUNDUZ

Trigger nedir?

Trigger’ın kelime anlamı tetikleyicidir,

Sqldeki anlamı da  database tabloları üzerinde bir değişiklik olduğu zaman çalışan sql sorgularıdır.

Triggerlar ile insert,update,delete yapılabilir.

Trigger oluşturmak

create trigger TriggerAdi
 
on TabloAdi
 
tetikleyici seçeneği(hangi olay olduğunda çalışsın)
 
as
 
select ....
 
creat trigger tg_KategoriSilindi
 
on Categories
 
for delete             --category silinmesini takip ediyor
 
as
 
select 'biri bir tane kategori sildi' as silme                  ---verilecek mesaj
adsiz9

Yeni eklenecek olan çalışanın adını veoyadını ve aldığı ID değerini ekrana

yazdıralım:

create trigger tg_CalisanEklendi
 
on Employees
 
for insert
 
as
 
declare @ad varchar(10)
 
declare @soyad varchar(10)
 
declare @id int
 
select @ad=FirstName,
 
@soyad=LastName,
 
@id=EmployeeID from inserted
 
declare @veri varchar(36)
 
set @veri=cast(@id as varchar(3))+' '+@ad+' '+@soyad
 
select @veri as veriyo
 
insert into  Employees(FirstName,LastName)
 
values('fulya','ayluf')

–ekleme işlemini yapılacağı zaman trigger da çalışır ve ekleme işlemi

r

İnstead of Triggerlar

Triggerlar ile asıl yapılması gereken yerine başka bir iş yaptırmak istediğimizde instead of trigger kullanılır.

Bu örnekte silme işlemi yerine mesaj verdirtecez:

create trigger tg_KtegorileriKoruyalim

on Categories

instead of delete

as

select ‘Kategorileri silemezsin!!!’  as mesaj

delete from Categories where CategoryID=1

d

İnsead of triggerların önemli kullanım alanlarından bir tanesi de viewler ile birlikte kullanmaktır,birden fazla kaynak tablo ile oluşturulmuş viewlerde insert,update,delete  işlemleri yapılmak istendiğinde instead of trigger kullanmak zorunda kalınıyor,aksi halde hata verir.

DERYA GÜNDÜZ

deryagunduz.blogspot.com

Bookmark and Share

SQL’DE VİEW(SANAL TABLO) OLUŞTURMAK

03 Temmuz 2010 – 13:23 Yazar: Derya GUNDUZ

View ler hangi durumlarda kullanılır,faydaları nelerdir?


Yapacağınız sql işleminde birden fazla tabloyu ve onların farklı farklı colonlarını kullanacaksınız,hepsini birleştirmek ,gerekli tablodan sorgu yapmak biraz zahmetli bir iş olabilir,bunun yerine view denen sanal tablolardan oluşturup,gerekli colonları farklı tablolardan alıp sorguları tek bir tablo üzerinden yapmak işinizi kolaylaştırailir.Karmaşık sorgular kolay bir hale gelmiş  olur.Ayrıca view kullanmanın çok önemli nedenlerinden bir tanesi sağladığı güvelikler.Tablolarınızın tamanının görünmesini istemediğiniz zamanlarda  sanal tablo kullanıp tablolarınızın tamamının görünmesini engelleyebilirsiniz.

View ler üzerinde yapılan değişikler kendilerini oluşturan kaynak tabloları da etkiler,aynı değişiklikler kaynak tablolara da yansır.

Oluşturulan Viewler  resimde görüldüğü gibi  Object Explorer kısmında ana başlık altında toplanır:

adsiz41

Viewler nasıl  oluşturulur?

create view vw_viewAdi

–tavsiye olunur ki oluşturulan view adları vw_ ile başlasın,böylece veri tabanınıza yeni bakan biri onun view olduğunu kolayca alsın

as

select kolonAdi from tabloAdi

where şart

with check option

view oluştururken with check point ifadesi yazılırsa,tanımlamadaki where şartı muhafaza edilmiş olur where şartı dışındaki insert,update,delete işlemleri yapılmaz hata verir

create view vw_DogruHazirlanmisView

as

select firstname,lastname

from Employees

where FirstName like ‘a%’

with check option

insert into vw_DogruHazirlanmisView values(’derya’,'dd’)

–eklenme yapılmak istendiğinde hata verir

hata:The attempted insert or update failed because the target view either specifies WITH CHECK OPTION or spans a view that specifies WITH CHECK OPTION and one or more rows resulting from the operation did not qualify under the CHECK OPTION constraint.(with check pointten dolayı ‘a’ ile başlamayan bir ekleme yapılamaz)

with Schemabinding

Viewin oluşturulduğu kaynak tablo üzerinde değişiklik yapılmasına izin vermeyecek.

create  view vw_CokUgrastim

with schemabinding          –sütunla ilgili bir değişiklik yapılamıyor

as

select firstname,lastname,city

from dbo.employees  –dbo. olmalı

drop table Employees          –yazıldığında hata verir

hata:Could not drop object ‘Employees’ because it is referenced by a FOREIGN KEY constraint.

with encription(gizli view)

Kaynekların  gizliliğini sağlayan koddur,kullanıcı sadece oluşturulan view ile ilgili verilere erişebiliyor,kaynak tablolarla ilgili hiç bir bilgiye ulaşamıyor.

create view vw_Benim

with encryption   –kaynak görmeme,design aktif değil

as

select * from products

adsiz8

Resimde de görüldüğü gibi gizli view kullanıldıktan sonra viewin üstünde kilit işareti olur ve ‘modify’ seçeneği aktiif değildir.

DERYA GÜNDÜZ
deryagunduz.blogspot.com
deryagunduz47@gmail.com
Bookmark and Share

DataGrid ile ziyaretçi defteri yapma

28 Haziran 2010 – 08:55 Yazar: Latif TURK

Evet arkadaşlar bir çok sitede gördüğümüz ziyaretçi defterini oluşturacağız.İlk önce veri tabanımızı aşağıdaki gibi bir table oluşturuyoruz.Table’ın adını defter koyuyoruz.

Birde veri tabanımızda Stored Procedures’ü dışarıdan girdiğimiz verileri kaydetmek için aşağıdaki gibi oluşturuyoruz.

Şimdi aspx kısmında dizaynımızı yapıyoruz.

<table class=”style1″>

<tr>

<td class=”style2″ colspan=”2″>

Ziyaret Defteri</td>

</tr>

<tr>

<td class=”style3″>

İsim</td>

<td>

<asp:TextBox ID=”txtad” runat=”server” BorderStyle=”Solid”></asp:TextBox>

</td>

</tr>

<tr>

<td class=”style3″>

E-posta</td>

<td>

<asp:TextBox ID=”txtposta” runat=”server” BorderStyle=”Solid”></asp:TextBox>

</td>

</tr>

<tr>

<td class=”style3″>

Yorum</td>

<td>

<asp:TextBox ID=”txtyorum” runat=”server” BorderStyle=”Solid” Height=”130px”

TextMode=”MultiLine” Width=”359px”></asp:TextBox>

</td>

</tr>

<tr>

<td class=”style3″>

<asp:Button ID=”Button1″ runat=”server” Text=”Kaydet” onclick=”Button1_Click” />

</td>

<td>

&nbsp;</td>

</tr>

</table>

Burda Kullanıcı adı için txtad’ı eposta için txtposta’yı yorumlar içinde txtyorum’u oluşturuyoruz fakat burda Properties den TextModunu MultiLine yapıyoruz.(Yorumlarımız uzun olabileceğinden dolayı yaptık.)

Code behind kısmına geciyoruz.

protected void Button1_Click(object sender, EventArgs e)

{

SqlConnection baglantı = new SqlConnection(ConfigurationManager.ConnectionStrings["Database"].ConnectionString);

SqlCommand komut = new SqlCommand(“ziyaretdefteri”, baglantı);

komut.CommandType = CommandType.StoredProcedure;

komut.Parameters.Add(“@isim”, SqlDbType.VarChar).Value = txtad.Text;

komut.Parameters.Add(“@eposta”, SqlDbType.VarChar).Value = txtposta.Text;

komut.Parameters.Add(“@yorum”, SqlDbType.Text).Value = txtyorum.Text;

baglantı.Open();

komut.ExecuteNonQuery();

baglantı.Close();

}

Burada textboxlara girdiğimiz verileri stored procedures veri tabanına kaydediyoruz.

Şimdi veritabanımıza kaydettiğimiz verileri DataGrid ile sayfamızda gösterecez.Toolbox dan DataGridi sayfamıza sürükleyip bırakıyoruz. Şimdi aşağıdaki resimlerdeki adımları takip edip bağlantımızı oluşturuyoruz.

Eğer Data connetion bölümünde veri tabanımız gözükmüyorsa web.config’ den Connetion String’in içine

<add name=Database connectionString=Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True providerName=System.Data.SqlClient/>

Kodunu ekleyip veri tabanımızı uygulamaya tanıtıyoruz.

Bu ayarları yaptıktan sonra projemizi çalıştırınca aşağıdaki gibi bir sonuç elde ediyoruz.

Bu makalede ziyaretçi defteri yapmaya çalıştık. Umarım katkısı olmuştur. Yeni makalelerde görüşmek üzere.

Saygılarımla

Bookmark and Share

OBJECT ORİENTED PROJESİ-CONSOLDE EŞİNİ BUL OYUNU

19 Haziran 2010 – 01:54 Yazar: Derya GUNDUZ

Projemde 5×5 matrix içine her defasında random olarak atılan, her birinden ikişer tane olmak

üzere 12 çeşit harf ve birinin eşi olmayan harfler kullandım .Matrixi “manager” classında

tanımladım matrixden main de nesne oluşturdum,”harfler” adlı 25 elemanlı bir dizide 13 çeşit harf, her

birinden 2şer tane birinin eşi olmayacak şekilde ,eleman atadım.ayrıca “diz” adında 25 elemanlı bir dizi

daha oluşturdum ve bu dizinin elamlarını 1den 25e kadar random oluşturulmuş sayılar meydana

getirdi.Sonra “diz“ dizisinin 1. elamanının değerine göre “harfller” dizisinin elemanını aldım ve

matrixin sıradan gelen elamanı ile eşleştirdim.Böylece matrix her program çalıştığında random olarak

harf değerlerini almış oldu.

Manager classından iki tane nesene oluşturdum,”ilk” matrixi random harf değrleri atanmış

matrix,”geçici” matrixi ise en başta boş olan ve kullanıcının söylediği koordinatların eşitlik durumuna

göre değer alan matrixdir.koordinatlar aynı oldukça “geçici” matrixi “ilk” matrixinin o koordinat

değrlerine eşit oluyor,o değerleri alıyor ve ekranda o değerler kapalıken açılmış gibi

görünüyor,koordinatlar aynı olunca “manager” claasına yamış olduğum “puanarttır” fonksiyonu devreye

giriyor ve oyuncu 5 puan kazanıyor.Girilen koordinatlar aynı değilse “ilk” matrixinin o koordinatı ile

“gecici” matrixinin o koordinatı eşit olmuyor oyuncu bir süre o koordinatları görüyor ve sonra o

görünen koordinatların yerine gecici matrixinin elemanları görünüyor(kapalıymış gibi).

Koordinatların alınması işini de “player” classı yapıyor,kullanıcıdan koordinat isiyor,kontrolleri

yapıyor ona göre “gecici” matrixine eleman ataması yapıyor ya da koordinatlar matrix indexi dışındaysa

hata mesajları döndürüyor.

Her bir puan verilip ya da yanlış koordinat söylenmesi halinde kullanıcıya çıkış yapıp

yapmamak istediği soruluyor,oyuncya çıkmak istiyorsa “q” ya devam etmek istiyorsa herhangi bir tuşa

basılması gerektiği söyleniyor.

projenin tamamını indirmek  ,kodları görmek için    tıklayın

DERYA GÜNDÜZ

http://www.deryagunduz.blogspot.com

deryagunduz47@gmail.com

Bookmark and Share

PIC 16F877A DA YANAN LEDİN SAĞA SOLA HARAKET ETMESİ-RLF RRF KULLANIMI

17 Haziran 2010 – 00:55 Yazar: Derya GUNDUZ

Pic 16f877a da ledin yanması demek  kullanılan  potrun ilgili  bitinin “1″ olması demektir.Yanan bir  ledin sağa sola hareket etmesini sağlayan özel komutlar  vardır:

rlf :   Açılımı “rotate left file”,içeriği sola kaydırmaya yarar.Örneğin portun içinde b’01000000′  ise  rlf komutu bir kere uygulandığında b’10000000′   şeklinde olur.

rrf: Açılımı “rotate right  file”,içeriği sağa kaydırmaya yarar.Örneğin portun içinde b’01000000′  ise  rrf komutu bir kere uygulandığında b’00100000′   şeklinde olur.


portun içeriğini sağa  sonra sola kaydıran örnek kodu inceleyelim:

Bu kodda    PORTB nin içine en başta b’00000001′  sayısı  yerleştiriliyor,içerik 7. bit 1 olana kadar her defasında  bir bit sola kaydırılıyor, çünkü 7. bit  1 olduğunda sola kayacak yer klamıyor,bu kontrolden sonra  sağa kaymalar başlayacaktır.Bu aşamada da içerik0. bit 1 olana kadar  her defasında bir bit olmak üzere sağa kaydırılıyor ,0. bit  1 olduğunda yine sola kayma olacaktır.

SAYAC1 EQU h’0C’   ;gecikme sayacları için adresler belirtiliyor
 
                  SAYAC2 EQU h’0D’
 
                       CLRF PORTB      ;potrbnin içi en başta temizleniyor
 
            BSF STATUS,5             ;bank1 tris registerlarının ayarlanması için seçildi
 
                 CLRF TRISB             ;portb çıkış portu yapıldı
 
                  BCF STATUS,5                  ;port içeriği ile ilgili işlem yapılması için tekrar bank0 a geçildi
 
               MOVLW h’01’               
 
               MOVWF PORTB            ;portb nin içine b'00000001'  sayısı atıldı
 
SOL:
 
             CALL GECIKME;en başta bi bekleme anı oluyor
 
            RLF PORTB,F               ;içerik 1 birim sola kaydı
 
  BTFSS PORTB,7            ;portbnnin 7. biti kontrol ediliyor,
 
1 ise sağa kaydırma başlayacak 1 değilse tekrar  sola kayma olacaktır                                                                                                 
 
GOTO SOL
 
SAG:
 
CALL GECIKME                    ;bekleme yapılıyor
 
RRF PORTB,F                     ;içerik 1 birim sağa kaydırılıyor
 
BTFSS PORTB,0                  ;portbnin 0. biti kontrol ediliyor 1 ise sola kaymaya geçilecek,0 ise sağa ;kaymaya devam
 
GOTO SAG
 
GOTO SOL
 
GECIKME:
 
              MOVLW h’FF’
 
             MOVWF SAYAC1           ;gecikme için sayac1 in içine h'FF'  sayısı atılıyor
 
DONGU1:
 
          MOVLW h’FF’
 
               MOVWF SAYAC2                 ;gecikme için sayac1 in içine h'FF'  sayısı atılıyor
 
DONGU2:
 
          DECFSZ SAYAC2,F
 
    GOTO DONGU2           ;sayac2 nin içindeki sayı 0 olana  kadar her defasında 1 azalt,0 olunca saya1 i      ;                                       ;azaltmaya git
 
               DECFSZ SAYAC1,F        ;sayac1in içi 0 olana kadar her defasında 1 azalt,0 olduğunda return yap
 
              GOTO DONGU1
 
              RETURN            ;en son callın yapıldığı adrese  gider
 
        END        ;programo bitir

DERYA GÜNDÜZ

http://deryagunduz.blogspot.com

deryagunduz47@gmail.com

Bookmark and Share

C++ da Function Template-Class Template

16 Haziran 2010 – 15:35 Yazar: Derya GUNDUZ

          Template in kelime anlamı taslaktır,c++ daki  kullanım şekli de kelime anlamına çok yakın bir kullanımdır. Fonksiyonu taslak olarak yazıyorsunuz ve  bu  fonksiyon farklı kullanım şekilleri  için esnek bir yapıya  sahip oluyor.

          C++ daki Function Template için  farklı tiplerde  kullanım esnekliği vardır.Bir  fonksiyonu farklı farklı tipler için ayrı ayrı yazmak yerine,tek bir  fonksiyon taslağı yazıp  bunu farklı tipler için kullanabilirsiniz.

          örneğin bir mutlak değer  fonksiyonun int veri tipi için şu şekilde yazarız:

 

 

        int mutlakdeger(int a){

      if(a>0)    return a;

       else return -a;

        }

    

      double veri  tipi için olanını şu şekilde yazarız:

                          

        double  mutlakdeger(double  a){

      if(a>0)    return a;

       else return -a;

        }

      

     long olan için ;

            long  mutlakdeger(long  a){

      if(a>0)    return a;

       else return -a;

        }

      

               yani bütün tipler için ayrı ayrı yazardık.Bunu  taslak şeklinde yazıp  bütün veri tipleri için kullanabilmek istediğimiz   zaman yapmamız gereken şey fonksiyonu template  şeklinde tanımlamak.

 

           Template kulllanımı şu şekilde: 


    template            //fonksiyonun başına yazılması gereken

     T mulakdeger (T a)                    //yukarda tanımladığımız template Tyi  veri tipi olarak  kullandık

  

             {

 

 if(a>0)    return a;

       else return -a;

 

         }

            int  main(){

              cout<<"int veri tipi için mutlak deger alma";

              cout<<"double veri tipi için mutlak deger alma";

             }

  bu şekilde kullanarak her veri tipi için ayrı yazma  gerekliliğinden kurtuluruz,kodlar kısalır fazla zaman  harcamak zorunda kalmayız.

          

    Template çeşitleri:

 

  •  template      //fonksiyonlar için kullanılır
  •  template                 //classı template şekilde kullanabilmek için,daha çok data                storage classlarda(container)  kullanılır
  •  template        //birden fazla  tip tanımlayabiliriz

       Class Template:

            templateler ayrıca classlar için de kullanılabilir,işlev olarak  functşon template gibidir

           

           template

class  deneme{

                    //  classın diğer  elemanlarının prototypeları  yazılır

……………

       public int  denemefonk(T  ){}

……….. 

            };

            implementasyonlar:

 

         template

          deneme::denemefonk(T  a){………..}

 

           int main(){

         denemenesne;

          ………..

       }

 

  şeklinde kullanılır…………

     

DERYA GÜNDÜZ

Eskişehir Osmangazi Üniversitesi  Bilgisayar Mühendisliği 2. sınıf

http://www.deryagunduz.blogspot.com

deryagunduz47@gmail.com

Bookmark and Share

The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value. The statement has been terminated

14 Haziran 2010 – 09:58 Yazar: Tahir MUTLU

sql sorgulamada datetime türünde yaptığınız sorgularda “The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value. The statement has been terminated” problemi ile karşılaşıyorsanız sorgunuza değeri gönderirken .ToString(“MM.dd.yyyy hh:mm:ss”) şeklinde düzenleyip göndrirseniz probleminiz çözülür.

?View Code CSHARP
SqlConnection con = new SqlConnection(/* kendi sql baglanma cümleniz */);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            DateTime dt = new DateTime(2010,6,10,0,0,0); // 10 haziran
            DateTime dt1 = new DateTime(2010, 6, 11, 0, 0, 0); // 11 haziran
 
            cmd.CommandText = "select * from tblDeneme where time>'" + dt.ToString("MM.dd.yyyy hh:mm:ss") + "' and time<'" + dt1.ToString("MM.dd.yyyy hh:mm:ss") + "'";
' kendi sql baglanma cümleniz 
2	Dim con As New SqlConnection()
3	Dim cmd As New SqlCommand()
4	cmd.Connection = con
5	Dim dt As New DateTime(2010, 6, 10, 0, 0, 0)
6	' 10 haziran
7	Dim dt1 As New DateTime(2010, 6, 11, 0, 0, 0)
8	' 11 haziran
9	cmd.CommandText = ("select * from tblDeneme where time>'" + dt.ToString("MM.dd.yyyy hh:mm:ss") & "' and time<'") + dt1.ToString("MM.dd.yyyy hh:mm:ss") & "'"
Bookmark and Share