Arkadaşlar önceki makalelerimde C# ile stored procedure nasıl kullanıldığından bahsetmiştik. Bu makalede ise eğer stored procedure’de output veriye sahip bir parametre değişkenimiz varsa nasıl kullanacağımızdan bahsedeceğiz.
Aşağıdaki gibi bir stored proceduremuz olduğunu düşünelim;
create proc [dbo].[up_SifreOlustur]
@RandomID char(32) OUTPUT
as
begin
//--
end
Görüldüğü gibi Stored Procedure OUTPUT parametreli bir değişken alıyor bunun anlamı şu ‘Stored Procedure’ çalıştırıldıktan sonra @RandomID isimli değişkene bir değer yazılacak. Bunu C# programımızda kullanmak için ise aşağıdaki gibi bir yöntem izleyeceğiz;
SqlConnection cnn = new SqlConnection();
cnn.ConnectionString = Properties.Settings.Default.ConnectionString;
cnn.Open();
SqlCommand cmd = new SqlCommand();
Kodumuzu inceleyecek olursak C# ile normalde nasıl stored procedure çalıştırıyorsak yine aynı şekilde çalıştırıyoruz fakat tek fark şu; cmd.Parameters.Add(“@RandomID”, SqlDbType.VarChar, 32); burada normalde .AddWithValue(…) deyip parametremizi geçiyorduk bu sefer .Add(…) kullanarak parametreyi geçiyoruz. Fonksiyonu inceleyecek olursak ilk parametre Stored Procedure’un istediği değişken ismi, 2. parametre ise değişkenin türü, 3. parametre ise değişkenin uzunluğu (int türü bir değişken olsaydı son parametreyi kullanmayacaktık). cmd.Parameters[“@RandomID”].Direction = ParameterDirection.Output; bu kısmı bu zamana kadar açıkcası bende bilmiyordum araştırdığımda ne anlama geldiğini öğrendim. Parameters dizisinin “@RandomID” parametresini OUTPUT yapmak için kullanılıyor. Bu işlemi yaptıktan sonra gönül rahatlığı ile Stored Procedure çalıştırılabilir. Son olarak işlem bittikten sonra değeri okumak için; cmd.Parameters[“@RandomID”].Value; kısmından değerimizi okuyabiliriz. object türünden olduğu için tür dönüşümü operatörünü kullanmak gerekiyor.
Umarım sizler için faydalı olmuştur, yeni bir makalede görüşmek üzere…
Ms-Sql Server 2005’de bizlere faydalı olan bazı fonksiyonları sizlere burada açıklamaya çalışacağım daha fazlasını MSDN’den bulabilirsiniz. MSDN için yeri gelmişken birkaç birşey söylemek isterim, Visual Studio IDE’sini yapan ekibi tebrik ederim ama MSDN kütüphanesini hazırlayan ekibde en az onlar kadar saygıyı hak ediyorlar. Gerçek bir kütüphane, neredeyse her problemin çözümü ve bilmediğiniz bir o kadar bilgi MSDN’de mevcut bu zamana kadar girmediyseniz mutlaka o ortamada alışmaya başlayın. Konumuza dönersek bazı birkaç faydalı fonksiyonlardan bahsedeceğiz bunlardan ilki string fonksiyonları
len(string)fonksiyonu, hemen hemen her programcının kullandığı string’in karakter sayısını öğrenmeye yarayan faydalı bir fonksiyondur.
ltrim(string) fonksiyonu, yazının sol tarafındaki boşlukları silen fonksiyon.
rtrim(string) fonksiyonu, yazının sağ tarafındaki boşlukları silen fonksiyon.
left(string, karakter sayısı) fonksiyonu, parametre olarak geçilen string’in sol tarafından belirtilen sayıda karakter alan fonksiyon.
right(string, karakter sayısı) fonksiyonu, parametre olarak geçilen string’in sağ tarafından belirtilen sayıda karakter alan fonksiyon.
substring(string, başlangıç, karakter sayısı) fonksiyonu, parametre olarak geçilen stringin başlangıç indisinden itibaren karakter sayısı kadar karakteri alan fonksiyon.
isnumeric(ifade) fonksiyonu, parametre olarak geçilen ifadenin numeric olup olmamasına göre 0 veya 1 döndürüyor.
Rand([seed]) fonksiyonu, gerçi dönüş değeri float türünden bir sayı.
GetDate() fonksiyonu, size o anki tarih ve saati geri döndürür.
Bunun gibi daha birçok fonksiyona MSDN kütüphanesinden ulaşabilirsiniz, ben sadece sizlere benim en fazla kullandığım fonksiyonları verdim. Umarım faydalı olmuştur.
Arkadaşlar Trigger’ı açıklamak gerekirse, siz tablonuza bir değer eklediğiniz, sildiğinizde ya da değiştirdiğinizde yapılmasını istediğiniz işlerin otomatik olarak gerçekleşmesini sağlıyor. Bunu biraz açıklayayım. Diyelim ki siz bir firmaya ürün stok programı yapıyorsunuz, bir üründen 2 adet sattığınızda otomatik olarak stok’dan düşmesi lazım, satan kişi gidip bir daha stok tablosundan 2 tane sattığı üründen düşmesin. İşte bu gibi işlemleri ‘Trigger’lar sayesinde yapabiliyoruz. Şimdi bakalım bu ‘Trigger’ları nasıl kullanıyoruz.
Sentaksı;
create trigger [Trigger Adı] on [Tablo Adı]
for [Delete, Update, Insert]
as
begin
-- Yapılacak işler
end
Sanırım sentaks’da sadece for olan kısmı açıklamak yeterli olacaktır. for kısmı Trigger’in ne zaman tetikleneceğini söylüyor. Yani tabloya bir veri girildiği zaman mı?, bir satır silindiği zaman mı? yoksa bir satırdaki bilgi değiştirildiği zaman mı? bunu belirtiyor. Diğer kısımlarda anlaşılmayan bir kısım olduğunu zannetmiyorum.
Sentaks’ı uygularsak;
create trigger tr_MusteriSil on Musteri
for Delete
as
begin
insert SilmeLog
select Musteri, MusteriNo, getdate() from deleted
end
Uygulamada ki Trigger’ımız tahmin ettiğiniz gibi silme işleminde otomatik olarak SilmeLog isimli tabloya silinen veriyi kopyalıyor. from deleted kısmında ise silinen satırdaki veriler var ve tek satırlık bir veridir. Oradaki verileri select komutuyla çekiyoruz.
Trigger işlemleri çok sık kullanılan ve faydalı bir işlemdir. Umarım sizler için faydalı olmuştur.
Ms-Sql Server’da veritabanınızın yedeğini almak ve yüklemek çok basit bir şekilde yapılıyor. Normal dosya kaydetme, yükleme işlemlerinden farksızdır. Aşağıda adım adım bir veritabanı yedeği nasıl alınır ve yüklenir görelim;
1. Yedeğini almak istediğimiz veritabanına sağ tıklayıp ‘Backup’ seçeneğini seçiyoruz.
2. Çıkan menüden bize veritabanımızı yedekleme türünü söylüyor. Ister ‘Full’ yedeğini alabiliriz isterseniz ‘Differential’ yedeğini alabilirsiniz. Eğer yer probleminiz yoksa ‘Full’ yedek almayı seçebilirsiniz. Yedeği kaydedeceği noktayı aşağıda gösteriyor burayı isterseniz değiştirebilir, isterseniz farklı bir yer ekleyebilirisiniz.
3. Options menüsüne girdiğinizde karşınıza bazı seçenekler çıkacaktır. Veritabının bir kopyasınımı oluştursun yoksa üzerine mi yazılması, media kartlarına mı yoksa sabit bir disk’e mi, yazıldıktan sonra kontrol edilsin mi gibi seçenler sunuluyor ben bu şekilde bırakıp yedekleme işlemimi sonlandırıyorum.
Yükleme kısmına gelirsek;
4. Yine yedek yükleyeceğimiz veritabanında sağ tıklayıp Task->Restore->Database seçeneklerini seçiyoruz.
5. Karşımıza çıkan ekranda default olarak Backup klasörünün altına bakıyor ve orada gördüğü .bak uzantılı dosyaları bize çıkartıyor. Yüklemek istediğimiz dosyayı seçip OK tuşuna basıp veritabanı yükleme işlemini sonlandırıyoruz.
Gördüğünüz gibi MS-Sql Server’da yedek alma ve yükleme işlemleri o kadar da zor değil. Umarım faydalı olmuştur arkadaşlar…
Stored Procedure nedir sorusunun cevabını şöyle versek herhalde yanlış bir cevap vermiş olmayız. T-SQL komutları ile yazdığınız kodları çalışma anında derleyerek çalıştırmasını sağlayabileceğiniz bir SQL Server aracıdır ‘Stored Procedure’. Peki bu bize neler sağlayacak? Bununda cevabını şöyle sıralarsak doğru bir cevap vermiş oluruz;
– Kullanıcıya kullanım kolaylığı sağlar,
– Yazdığınız kodları parametrik bir şekilde çalıştırmanızı sağlar,
– Zamanlanmış görevlere ekleyerek belli aralıklarla çalıştırabilirsiniz.
– Uygulama kısmında sizi birçok kontrollerden kurtarır,
– Daha az network bandı kullanır, böylece ağınızda bir yavaşlamaya yol açmaz.
Bu listeyi daha da uzatmak elbette mümkün ama bize şimdilik bu kadarı bile ‘Stored Procedure’ kullanmamıza yeterli bir sebep. Peki bunu nasıl kullanacağız? Sentaksı aşağıdaki gibi;
create proc [Stored_Procedure_Ismi]
Parametreler...
as
begin
Kodlar...
end
Sentaksı uygularsak;
create proc [up_SaticiEkle]
@SaticiKod int,
@SaticiAd varchar(100),
@Bakiye decimal(10.2)
as
begin
insert Satici (SaticiKod, SaticiAd, Bakiye) values (@SaticiKod, @SaticiAd, @Bakiye)
end
'Stored Procedure' bu şekilde oluşturduk. Biz bu 'Stored Procedure' kullanacağımız zaman 3tane parametre geçmemiz gerekiyor, yaptığı iş ise geçtiğimiz bu parametreleri Satici tablosuna eklemek. Burada birşeye daha dikkatinizi çekmek istiyorum, 'Stored Procedure' isimlendirilirken başına "up_" koydum bunu koymamdaki sebep "User Procedure" olduğunu belirtmek, "System Procedure'leride SQL'de sp_ ile başlar.
Peki gelelim şimdi hazırladığımız bu 'Stored Procedure'leri kullanmaya. Aşağıdaki kod parçacı bir 'Stored Procedure' nasıl kullanılır sorusu için en güzel örnek;
Kullanımını açıklarsak, "10, IstanbuElektronikAnahtar, 200.40" parametlerini Satici tablosuna ekleyecektir. Temel olarak 'Stored Procedure' oluşturma ve kullanımı bu şekildedir. Sitemde hazırlamış olduğum "C# ile Windows Formuna Login Girişi" projesinde birden fazla 'Stored Procedure' hazırladım ve kullandım. Ilerleyen günlerde .Net ortamında da nasıl çalıştıracağımızı detaylı bir şekilde anlatacağım. Bu ayın ilk konusunu geçde olsa bitirdim. Umarım sizler için faydalı olmuştur.
Yaptığımız uygulamalarınçalışması için önceden bir ‘Kullanıcı Adı’ ve ‘Şifre’ sorarak çalışmasını isteyebiliriz. Bunun için bir çok algoritma geliştirilebilir. Bu makalede benim izleyeceğim yol, ‘Kullanıcı Adı’ ve ‘Şifre’ bilgilerini bir veritabanında tutmak olacak, hatta kullanıcının ‘Yetki’lerini de veritabanında tutarak uygulamamızda kullanıcıya özel yetkiler verebiliriz. Aşağıdaki resimde kullanıcı ve yetki bilgilerinin veritabanı tasarımı SQL Server 2005’de yapılmış olarak gösterilmektedir.
Tasarımı incelersek; ‘Yetki’ tablosu bizim uygulamamıza özel yetkileri içeriyor. Mesela bir ürün takip otomasyon’u yapıyorsak, ‘Stok Gir’, ‘Stok Çık’ bunlar yetki olabilir ve depo bölümünü ilgilendiren yetkilerdir, aynı şekilde ‘Cihaz Üretime Hazırla’ gibi bir yetki’de üretim bölümünü ilgilendiren bir yetkidir. Uygulamamızda birde ‘Admin’ yetkisi olur bu yetki de yeni kullanıcı ekleyebilir, yetkileri değiştirebilir. Bunu yapması için de Yetkilerin adlarını da tutmamız Admin için daha anlaşılır yapar. ‘Kullanicilar’ tablosuda ‘KullaniciNo’, ‘KullaniciSifre’ ve ‘KullaniciAdi’ tutar bu tablo da ‘Kullanıcı Adı’ ve ‘Şifre’ bilgileri tutulur. ‘Kullanıcı No’ tek bir ‘Kullanıcı Adı’ ve ‘Şifre’ olacağı için primary key olarak tanımlanmışdır. Son olarak ‘Izin’ tablosu da ‘Kullanıcı No’, ‘Yetki No’ ve ‘ErisebilirMi’ sütunlarından oluşuyor. Bu tabloyu incelersek, Kullanıcı No’yu primary key yapamayız çünkü bir kullanıcınınbirden fazla yetki’si olabilir, yetki’yide primary key yapamayız çünkü bir yetki birden fazla kullanıcı için kullanılabilir, ‘ErisebilirMi’ sütunuda zaten primary key olması söz konusu değil, bu tablo KullanıcıNo ve Yetki tablosunun birbirine bağlayan bir tablodur. Veritabanı kısmı tasarımımız bittikden sonra şimdi uygulamamızı tasarlayalım.
‘Kullanıcı Adı’ ve ‘Şifre’ soran basit bir form tasarımı hazırladık. Tüm menüler deaktif, kullanıcı şifre girmeye başladığı zaman ‘Tamam’ butonuda aktif olacak şekilde hazırladık. Şimdi veritabanına birkaç kullanıcı, yetki ve izin ekleyelim.
Yukarıda bazı yetki’ler, kullanıcılar ve izin’ler belirledik, kullanıcıya göre yetki verdik. Şimdi farklı kullanıcılarla giriş yapalım ve bakalım uygulamamızda doğru yerler aktif oluyor mu. Murat kullanıcısının sadece ‘Stok Gir’ ve ‘Stok Çık’ yetkisi verdik, Burak kullanıcısına bu yetkileri vermedik, sadece ‘Admin’ ve ‘Ürün Hazırlama’ yetkisi verdik.
Formumuzdan ‘Murat Özkan’ kullanıcı adı ile giriş yapıldığında;
‘Burak Özkan’ kullanıcı adı ile giriş yaptığında;
Farklı kullanıcı girişlerinde farklı yerler aktif oldu, peki bunu nasıl yaptık? İşin kod kısmını biraz inceleyelim. Önce ‘Tamam’ butonunun ‘Click’ eventinde olanları yazalım;
Kod’u incelediğimizde veritabanı’nın ‘Kullanıcı’ tablosundan ‘Kullanıcı Adı’na göre şifresini alıyoruz ve girilen şifreyle karşılaştırıyoruz. Eğer şifre doğruysa yetkilerini yüklüyoruz aksi durumda hata verip hiçbir menüyü aktif etmeden fonksiyonu bitiriyoruz.Şimdi ‘YetkileriniYukle()’ fonksiyonunu inceleyelim;
private bool YetkileriniYukle()
{
SqlConnection cnn = new SqlConnection();
cnn.ConnectionString = Properties.Settings.Default.ConnectionString; cnn.Open();
DataSet ds = new DataSet();
SqlDataAdapter sda = new SqlDataAdapter("select YetkiNo, ErisebilirMi from Izin where KullaniciNo = '" + KullaniciNo + "'", cnn);
sda.Fill(ds);
if ((ds.Tables.Count == 0))
{
MessageBox.Show("Yetkiler Yüklenemiyor.", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
for (int i = 0; i < ds.Tables[0].Rows.Count; ++i)
{
int yetkiIndis = (int)ds.Tables[0].Rows[i][0];
YetkiDizisi[yetkiIndis] = (bool)ds.Tables[0].Rows[i][1];
}
return true;
}
Bu fonksiyonda da KullaniciNo’ya göre Izin tablosundan yetkileri aldık, bir tane global YetkiDizi’miz var, veritabanından verdiğimiz yetkilere göre YetkiDizi’si dolduruluyor, yetkiIndis’de sıralı olmayacağı için Izın tablosundanki YetkiNo’ya göre dolduruluyor böylece programda ki indis’le veritabanında ki YetkiNo aynı olmuş oluyor.Son olarakda kullanıcı ekleme, silme, şifre değiştirme ve kullanıcının yetkilerini belirleme kısmını yapalım;
Yukarıdaki şekilde form’larımızı tasarladık, bu işlemleri yapmak için ‘Stored Procedure’ kullanacağız. Ilk olarak Kullanıcı Sil formunu inceleyelim;
Form’un Load kısmı ve button1_Click event’i şöyle;
Form ilk açıldığında Kullanıcılar veritabanından yükleniyor, ‘Kullanıcı Sil’ butonunda SQL Serverda hazırladığımız ‘@KullanıcıNo’ parametresi alan stored procedure çağırıyoruz;
Stored Procedure;
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER proc [dbo].[up_KullaniciSil]@KullaniciNo intasbeginbegin tran
begin try delete from Izin where KullaniciNo = @KullaniciNo end try begin catch rollback tran return end catch
begin try delete from Kullanicilar where KullaniciNo = @KullaniciNo end try begin catch rollback tran return end catch
commit tran end
Yetkilendirme ayarları formunu belirlediğimiz yetkilerin isimlerine sahip olan checkBox ekliyoruz. FormLoad kısmında yine kullanıcıları yüklüyoruz, seçilen kullanıcıların yetkileri seçilmiş oluyor.FormLoad ve ‘UYGULA’ butonun kod kısmı aşağıdaki gibi;
private static CheckBox[] cbDizi = new CheckBox[7];
public string KullaniciAdi;
public int KullaniciNo;
private DataSet dsKullanicilar;
private void YetkilendirmeAyarlari_Load(object sender, EventArgs e)
{
cbDizi[0] = Yetki0;
cbDizi[1] = Yetki1;
cbDizi[2] = Yetki2;
cbDizi[3] = Yetki3;
cbDizi[4] = Yetki5;
cbDizi[5] = Yetki6;
cbDizi[6] = Yetki13;
SqlConnection cnn = new SqlConnection();
cnn.ConnectionString = Properties.Settings.Default.ConnectionString;
cnn.Open();
dsKullanicilar = new DataSet();
SqlDataAdapter sda = new SqlDataAdapter("select * from Kullanicilar", cnn);
sda.Fill(dsKullanicilar);
if (dsKullanicilar.Tables.Count == 0)
{
MessageBox.Show("Kullanıcılar Yüklenemiyor.", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
for (int i = 0; i < dsKullanicilar.Tables[0].Rows.Count; ++i)
{ comboBox1.Items.Add(dsKullanicilar.Tables[0].Rows[i][2].ToString()); }
}
private void button1_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Yetkileri Değiştirmek İstediğinize Eminmisiniz?", "Otomasyon", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) != DialogResult.Yes)
{ return; }
SqlConnection cnn = new SqlConnection();
cnn.ConnectionString = Properties.Settings.Default.ConnectionString;
cnn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cmd.CommandText = "up_KullaniciYetkiDegistir";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@KullaniciNo", KullaniciNo);
cmd.Parameters.AddWithValue("@Yetki0", Yetki0.Checked);
cmd.Parameters.AddWithValue("@Yetki1", Yetki1.Checked);
cmd.Parameters.AddWithValue("@Yetki2", Yetki2.Checked);
cmd.Parameters.AddWithValue("@Yetki3", Yetki3.Checked);
cmd.Parameters.AddWithValue("@Yetki5", Yetki5.Checked);
cmd.Parameters.AddWithValue("@Yetki6", Yetki6.Checked);
cmd.Parameters.AddWithValue("@Yetki13", Yetki13.Checked);
try
{
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
MessageBox.Show("Yetkiler Başarıyla Değiştirildi.", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
SqlConnection cnn = new SqlConnection();
cnn.ConnectionString = Properties.Settings.Default.ConnectionString;
cnn.Open();
for (int i = 0; i < dsKullanicilar.Tables[0].Rows.Count; ++i)
{
if ((string)dsKullanicilar.Tables[0].Rows[i][2] == comboBox1.Text)
{ KullaniciNo = (int)dsKullanicilar.Tables[0].Rows[i][0]; }
}
DataSet ds = new DataSet();
SqlDataAdapter sda = new SqlDataAdapter("select YetkiNo, ErisebilirMi from Izin where KullaniciNo = '" + KullaniciNo + "'", cnn);
sda.Fill(ds);
if ((ds.Tables.Count == 0))
{
MessageBox.Show("Yetkiler Yüklenemiyor.", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
for (int i = 0; i < ds.Tables[0].Rows.Count; ++i)
{
int yetkiIndis = (int)ds.Tables[0].Rows[i][0];
cbDizi[yetkiIndis].Checked = (bool)ds.Tables[0].Rows[i][1];
}
}
Her kullanıcı için cbDizi setleniyor. cbDizi, chechBox’lardan oluşan bir dizi ve veritabanımızdaki YetkiNo ile aynı indis’e sahip.
Stored Procedure;
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER proc [dbo].[up_KullaniciYetkiDegistir]
@KullaniciNo int,
@Yetki0 int,
@Yetki1 int,
@Yetki2 int,
@Yetki3 int,
@Yetki4 int,
@Yetki5 int,
@Yetki6 int,
as begin
update Izin set ErisebilirMi = @Yetki0 where KullaniciNo = @KullaniciNo and YetkiNo = 0
update Izin set ErisebilirMi = @Yetki1 where KullaniciNo = @KullaniciNo and YetkiNo = 1
update Izin set ErisebilirMi = @Yetki2 where KullaniciNo = @KullaniciNo and YetkiNo = 2
update Izin set ErisebilirMi = @Yetki3 where KullaniciNo = @KullaniciNo and YetkiNo = 3
update Izin set ErisebilirMi = @Yetki4 where KullaniciNo = @KullaniciNo and YetkiNo = 4
update Izin set ErisebilirMi = @Yetki5 where KullaniciNo = @KullaniciNo and YetkiNo = 5
update Izin set ErisebilirMi = @Yetki6 where KullaniciNo = @KullaniciNo and YetkiNo = 6
end
Kullanıcı şifresini değiştirmek isteyebilir, bunun için ana form’dan giriş yaptıkdan sonra aşağıdaki işlemle kendi şifresini değiştirebilir. ‘DEĞİŞTİR’ butonuna basıldıkdan sonra yapılan işlemler aşağıdaki gibi;
private void button1_Click(object sender, EventArgs e)
{
if ((eskiSifre_tb.Text == "") || (yeniSifre_tb.Text == ""))
{
MessageBox.Show("Lütfen Eski ve Yeni Şifrenizi Giriniz", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (eskiSifre_tb.Text != KullaniciSifre)
{
MessageBox.Show("Eski Şifrenizi Lütfen Doğru Giriniz", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (MessageBox.Show("Şifre Değişikliğini Onaylıyormusunuz?", "Otomasyon", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) != DialogResult.Yes)
{ return; }
SqlConnection cnn = new SqlConnection();
cnn.ConnectionString = Properties.Settings.Default.ConnectionString;
cnn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cmd.CommandText = "up_KullaniciSifreDegistir";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@KullaniciAdi", KullaniciAdi);
cmd.Parameters.AddWithValue("@KullaniciSifre", yeniSifre_tb.Text);
try
{
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{ MessageBox.Show(ex.Message); return; }
MessageBox.Show("Şifre Başarıyla Değiştirildi", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
Burada eski şifreyi nasıl karşılaştırdığımızı sorabilirsiniz, bu form’da bir tane string türünden public ‘KullaniciAdi’ ve ‘KullaniciSifre’ tanımlıyoruz. Bu form’u ilk ana form’da çağırdığımız için kullanıcının adını ve şifresini zaten biliyoruz.
Stored Procedure;
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO
ALTER proc [dbo].[up_KullaniciSifreDegistir]
@KullaniciAdi varchar(50),
@KullaniciSifre varchar(50)
as begin
update Kullanicilar set KullaniciSifre = @KullaniciSifre where KullaniciAdi = @KullaniciAdi
end
Son olarak admin yetkisine sahip olan kişinin kullanıcı ekleme işlemine geldi. Ben burada yeni kullanıcılar için şifreyi sabit ‘otomasyon’ olarak belirledim. Yeni kullanıcı ilk kez girdikden sonra şifresini değiştirebilir, admin de kullanıcının yetkilerini sonradan belirler.’Kullanıcı Ekle’ butonuna basılınca yapılan işlem;
Yine SQL Server’da tanımlamış olduğumuz bir stored procedure çağırarak kullanıcı ekliyoruz.
Stored Procedure;
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER proc [dbo].[up_KullaniciEkle]
@KullaniciAdi varchar(50),
@KullaniciSifre varchar(50)
as begin
declare @KullaniciNo varchar(30);
set @KullaniciNo = ((select Count(*) from Kullanicilar) + 1)
insert into Kullanicilar values(@KullaniciNo, @KullaniciSifre, @KullaniciAdi)
end
Genel olarak Login form tasarımı bu şekilde elbette üstüne birkaç özellik daha koyarak geliştirilebilir. Umarım sizlere faydalı olur. Başka bir makalede görüşmek üzere.
Arkadaşlar merhaba, ilk yazımda düzenli olarak yazmaya çalışağım dedim ama malesef bunu tam manasıyla başaramadım, başarmam içinde 6ayda bir yazmam gerekiyor ki düzenli olsun :). Bu makalede SQL Server 2005’e aynı ağda bulunmadan internet üzerinden nasıl erişebileceğimizi anlatacağım.
Bu sistem aslında otobüs şirketlerin, büyük mağazaların vb. firmaların ürün takibini tüm şubelerinde güncel olarak görebildiği, bilet satışını yapabildiği uygulamaların temelidir. Ana bi server olacak, tüm şubeler yaptıklarını bu server’a yollayacak, güncel durumu bu server’dan okuyacak. Şimdi bu işlemi nasıl gerçekleştirdiğimizi anlatalım.
Ilk olarak SQL Server’ın ‘Sql Server and Windows Authentication’ mod’da olması gerekiyor. Bu ayarı SQL Server Management Studio’da Veritabanına sağ tıklayıp Özellikler dedikden sonra ‘Security’ sekmesinin altından seçebiliriz. Bu işlemin ardından, ‘Sql Server Configuration’dan ‘Sql Server(MSSQLSERVER)’a sağ tıklayıp Özellikler dedikden sonra karşımıza ‘Built-in account’ kısmını ‘Network Service’ olarak seçiyoruz.
Ardından Denetim Masası -> Windows Güvenlik Duvarı -> Özel Durumlar -> Bağlantı Noktası Ekle çıkan pencerede ‘Ad: SQL Server, Bağ. Nok No: 1433, TCP’ seçip ekliyoruz. Aynı yerden ‘Ad: SQL Server, Bağ. Nok No: 1434, UDP’ yazıp tekrar ekliyoruz.
Son işlem olarak modem’imizden bu portları açıp yerel ip adresimize yönlendirme işlemini yapıyoruz. Artık server’ımıza internet üzerinden erişebiliriz. Bunun için Connection String şu şekilde olmak zorunda.
Data Source=[Server IP],1433;Network Library=DBMSSOCN;Initial Catalog=[Veritabanımızın Ismi];User ID=[Kullanıcı Adı];Password=[Sifre];
Burak ÖZKAN; 2008 yılı, İstanbul Üniversitesi End. Otomasyon bölümü ve 2012 Kadir Has Üniversitesi Bilgisayar Müh. bölümü mezunu, iyi bir yazılımcı olmak için çok çalışıyor ve çalışmaya devam edecek.
Son Yorumlar