Merhaba,
basit de olsa, zor bir uygulama da olsa ileriye yönelik islemler yaparken mutlaka gelecekte hem güncellenebilir, hem de entegreye acik bir sekilde programlama yapmanizi tavsiye ederim.
Bir planlama yapmaniz sart. Ve bu planlama projeniz icin yaparken en azindan bir kagit kalem ile düsündügünüz uygulamaya ait ihtiyaclari bir kenara yazin. Ardindan uygulamanizin icinde olmasi gereken, yani programlamayi düsündügünüz modülleri bir kenara yazin. Eger ekstra komponentler kullanmayi planliyorsaniz onlari da yazin.
Uzaktan iletisim kurulmasi gereken yöntemlere iliskin belirli kurallar var. Madem ayni firmada iki bilgisayar arasinda kullanilacaksa o zaman yukaridaki bir kullanici arkadasimizin tavsiyesi dogrudur katiliyorum. Yani veritabani üzerinden haberlesilmesi en dogru cözüm.
Satis yapan bilgisayar A olsun. Diger bilgisayar B olsun. Veri tabanimizda V olarak adlandiralim. Detayli olmayan bir örnek verelim.
A bir satis yapar ve gider V'dan stok tablosundan bu satilan ürünü düser. B de ayni zamanda satis yapmak ister ve B de gidip V dan ürünün varligini kontrol etmesini ister. Ürünün var olmadigi anlasildiginda B satisi gerceklestiremez. Burada B bir buton yardimiyla ürün listesini güncellemek zorundadir ki bu sekilde ürünün varligini güncel olarak kontrol edebilir. Bu cok klasik bir yöntem.
Bunu daha güzel ve kullanisli bir yönteme cevirelim simdi de.
Veritabanimiz diyelim ki MsSQL ve söylediginiz gibi programlama dilimiz Visual Studio ile C# .NET. Kullanmayi planladigimiz nesne ise SqlClient'a ait SqlDependency. Bunu neden kullanmayi planliyoruz ? Cünkü A satis yaptiginda B nin otomatik haberi olmasi icin kisaca. Yani veritabaninda A tarafindan veya herhangi bir bilgisayar tarafindan herhangi bir islem oldugunda (bu islemden isleme degisiklik gösterebilir) iletisimin otomatik olarak saglanmasini saglamak icin. Veritabaninda yapmamiz gereken ise notifikasyon servislerini aktif etmemiz gerekmekte ilk basta ki degisimde iletisime gecegimiz baglantilar acik olsun. Asagidaki kodu MsSQL veritabaninizda yeni bir Query window acarak olusturdugunuz veritabanina uygulayiniz.
ALTER DATABASE veritabani_ismi SET ENABLE_BROKER with immediate rollback;
Not : Bazi durumlarda; veritabaninizn kurulum ayarlari veya ekstra ayarlari gibi nedenlerle güvenlik uyarisi alabilirsiniz. Böyle bir uyari query'ler icin (sorgular icin) alirsaniz o zaman T-SQL araciligiyla ya da SQL UI'i araciligiyla GRANT yetkisi vermeniz gerekebilir.
C# kodlamada ise burada Microsoft'un bir örnegi var bakabilirsiniz.
Ya da asagidaki kodlara bakabilirsiniz. Asagidaki kodlari eski bir WPF projesinde kullandigim icin App.Current.Dispatcher.Invoke kismini gözardi edebilirsiniz.
SqlConnection cn;
SqlCommand cmd;
private const string cnStr = @"Data Source=SERVER_ADRESI_YADA_ADI;Initial Catalog=TABLO_ISMI;Integrated Security=SSPI;";
public void DataControl()
{
try
{
SqlDependency.Start(cnStr);
cn = new SqlConnection(cnStr);
cmd = new SqlCommand("SELECT [email] FROM [dbo].[Email]", cn);
_sqlDep = new SqlDependency(cmd);
cn.Open();
_sqlDep.OnChange += new OnChangeEventHandler(OnChange);
SqlDataReader r = cmd.ExecuteReader();
App.Current.Dispatcher.Invoke(() =>
{
Emails.Clear();
while (r.Read())
Emails.Add(r[0].ToString().Trim());
});
if (cn.State == System.Data.ConnectionState.Open) cn.Close();
cmd = null;
}
catch (Exception xErr)
{
string xx = xErr.Message;
}
}
void OnChange(object sender, SqlNotificationEventArgs e)
{
SqlDependency dependency = (SqlDependency)sender;
dependency.OnChange -= OnChange;
DataControl();
}
Asagida örnek yapan kisilere ait linkler bulunmaktadir.
Türkce örnek 1
Ingilizce örnek
Saygilarimla