C#+SQL programın ağda paylaşılması???

serious

Asistan
Katılım
18 Mart 2007
Mesajlar
207
Reaksiyon puanı
2
Puanları
0
arkadaşlar C# + SQL kullandığım bi program yazdım. Setup haline getirip bitiricem inş ancak bu programın ağda aynı anda başka makineler tarafından kullanılmasını istiyorum. 1. makine aynı tabloya veri kaydederken 5. makine de aynı taboya kayıt girebilsin istiyorum yani. Bu konunun multithreading le ilgisi olamaz değil mi? Açıkçası kod yazarken ona hiç dikkat etmedim. Store procedure de kullandım. Yukarıda anlattığı gibi ağda paylaşılabilmesi için programın ek bişey yapmama gerek var mı. Şu haliyle bunu setup haline getirsem olur mu? Ağ olsa şu imkanlarda deniycem ama kurulu ne ağ ne makine var:):) bilgisi veya bu konuda bi deneyimi olan varsa paylaşırsa çok sevinicem...


Bu arada yazmayı unutmuşum. Programda raporlama var. Yani ağda tanımlı bir yazıcıdan çıktı alma işlemi de var. Belki farklı bi durumu vardır diye ekliyim dedim..
 

N3CAT1

Dekan
Emektar
Katılım
20 Nisan 2008
Mesajlar
6,609
Reaksiyon puanı
144
Puanları
63
iki kullanıcının aynı tabloyu aynı anda kullanması çok düşük bir olasılık. o yüzden bunun için bişey yapmana gerek yok. sql server ağda 1 makinaya kurulu olacak ve diğer bilgisayarlar bu makinayla iletişim kuracak. connection string yani bağlantı stringini bir metin belgesinden ya da ini dosyasından alman işini kolaylaştırır.

sql serverı ağda paylaşıma açtıktan sonra baglanıcak her makina için baglantı stringini ayarladıktan sonra programın çalışacaktır.

baglantı stringini ayarlamada yardımcı olacak site : http://www.connectionstrings.com
sql servere ağda paylaşıma açma: http://msdn.microsoft.com/en-us/library/ms165718.aspx
 

serious

Asistan
Katılım
18 Mart 2007
Mesajlar
207
Reaksiyon puanı
2
Puanları
0
aslında ben SQL serverı oluşturcağım setupın içine gömmeyi düşünüyodum. Ama şimdi sen diyince gerksiz yere dosya boyutunu büyütmüş olurum diye düşündüm. Ama eğer SQLı setup a gömersem ağda sql ı paylaşıma açmama gerek kalmaz dimi. Sence hangisini yapmalıyım.???



msdn e baktım şimdi orda en sonda protokollerden shared momery nın enable olması yeterlidir değil mi? TCP/IP gerek var mı??
çok soru sordum kusura bakma lütfen:(
 

N3CAT1

Dekan
Emektar
Katılım
20 Nisan 2008
Mesajlar
6,609
Reaksiyon puanı
144
Puanları
63
sql i setup a gömdüğün zaman her bilgisayarda bağımsız bir veritabanı oluşur. yani birinin girdiği kaydı başka biri kendi bilgisayarında göremez.

en mantıklısı sql server ve programın setup ı olarak 2 farklı setup olması ve sadece server görevi görecek bilgisayara 2 setup un kurulması, diğer bilgisayarlara sadece programın setup unun kurulması.

en son sorunu anlamadım.
 

Enis Kurtay

Asistan
Katılım
8 Eylül 2008
Mesajlar
204
Reaksiyon puanı
8
Puanları
18
Necati kardeşim bende sana bir soru sorayım hazır yakalamışken bu tip bir konuda.
SQL server'ı ağda bir tane makineye kurduk, herşeyi ayarladım, connectionstring falan filan hepsi hazır. İki kişi aynı id'yi kullandığında veya aynı anda aynı veriyi kullandığında çakışma yapmaması için ne yapmalıyım ?
 

N3CAT1

Dekan
Emektar
Katılım
20 Nisan 2008
Mesajlar
6,609
Reaksiyon puanı
144
Puanları
63
Necati kardeşim bende sana bir soru sorayım hazır yakalamışken bu tip bir konuda.
SQL server'ı ağda bir tane makineye kurduk, herşeyi ayarladım, connectionstring falan filan hepsi hazır. İki kişi aynı id'yi kullandığında veya aynı anda aynı veriyi kullandığında çakışma yapmaması için ne yapmalıyım ?

eğer uygulaman çok büyük değilse bişey yapmana gerek yok bence. ama böyle bir önlem almak istiyorsan da şu link yardımcı olacaktır sana:

http://blog.cihanucar.com/makale/sql-serverda-transaction-ve-with-nolock-kullanimi
 

serious

Asistan
Katılım
18 Mart 2007
Mesajlar
207
Reaksiyon puanı
2
Puanları
0
N3CAT1 kardeş Allah senden razı olsun. Conneciton stringi .ini dosyayla aldım, kolaymış da aslında:):) yavaş yavaş sona yaklaşıyorum galiba:) Çok sağol;)
 

annttiigs

Profesör
Katılım
7 Şubat 2007
Mesajlar
2,589
Reaksiyon puanı
24
Puanları
38
ancak eş zamanlı kayıt girme olayını engellemeyi unutma derim ben. ne kadar düşük olasılık olsa da, profesyonelliğe gitmek için onu da halletmen lazım. bunun için SQL kurulu olan makinede istekleri bir kuyruktan okuyan minik bir programcık yazabilirsin. Böylece client'lar SQL'deki senin servere verilerini yollarlar. Sen de bunları SQL'e yazarsın. Ekstradan, client, server ve ufak çaplı bir protokol uygulaması da yazmış olursun.

Kolay gelsin
 

serious

Asistan
Katılım
18 Mart 2007
Mesajlar
207
Reaksiyon puanı
2
Puanları
0
sağol arkadaşım bugünküleri bi sindireyim:):) dediklerini yarın sakin kafayla düşünücem. Eğer vaktim kalırsa haklısın aslında güzel olur, onu da böylece öğrenmiş olurum. Ne de olsa başıma gelmeyince öğrenmiyorum. Bari böyle böyle ilerleyelim di mi ama;)
Teşekkürler önerin için;)
 

Turab Garip

Dekan
Emektar
Katılım
30 Mayıs 2007
Mesajlar
6,887
Reaksiyon puanı
175
Puanları
1,063
Aynı anda kayıt girilmesi SQL'de bir soruna yol açmaz ki? :huh: MS SQL'de çok tecrübem yok, fakat tüm SQL sunucularında bu konuda sorun çıkmıyorken Microsoft'un bu konuda bir istisna yapıp SQL destekli program yazmayı durduk yerde bir kabusa dönüştüreceğini zannetmiyorum.

Tabloları kilitlemediğin sürece, uygun depolama motorları kullanırsan aynı anda onlarca kayıt girilebilir. ID sütunlarını otomatik almasını sağladığın müddetçe hiçbir sorun olmaz. Ancak kayıt düzenlemede iş değişir. Bunun da en güzel yolu kayıt sırasında tablo kilitlemektir. (Necati isimli arkadaşın bağlantı verdiği makaleden faydalanabilirsin)

Eğer onu yapamazsan, benim önerim, düzenlenmesi için arayüz yazdığın tablolara bir sütun daha açıp o anda başka yerde o satırın düzenlenip düzenlenmediğini kaydedebilirsin. Örneğin bir kişi bir satırı düzenlemek isterse veritabanındaki bu sütuna düzenlendiğine dair zaman etiketi girer (en akıllıcası unix timestamp'dir). Böylece ağdaki başka birisi bu kaydı düzenlemek isterse önce bu sütunu okursun, başka birisi şu anda bu kaydı düzenliyor diye uyarı gösterip onun düzenlemesini engellersin. Sunucuda da 5 saniyede bir toplama yapacak küçük bir uygulama yazarsın. Yani düzenleme yapmakta olan kişinin bilgisayarının beklenmedik kapanma veya programın hata verme ihtimaline karşılık. Bu 5 saniyelik periyod içinde kendini güncelleştirmeyen tüm düzenleme kayıtlarını silersin.

Anlatırken karmaşık gibi görünüyor ama bir başlarsan aslında çok kolay olduğunu da görürsün. :)
 

serious

Asistan
Katılım
18 Mart 2007
Mesajlar
207
Reaksiyon puanı
2
Puanları
0
elmacık sağol tavsiyen için ama şu an bi problemimi çözmem gerek. Basit bi yerden kaçırıyorum ama ben artık göremiyorum. Lütfen şuna bi bakın.
N3CAT1,
ya ben senin dediğin gibi .ini uzantılı bi dosya oluşturdum ve connectionstring i o ini dosyamdan aldım. programın setup ını oluşturdum. Kendi bilgisayarımda hiç bi problem yok. SETUP ı çalıştırınca verileri alıp veritabanıyla ilgili işlerini hallediyor.Çıktı raporunu veriyor ağdaki tanımlı yazıcıdan. Buraya kadar sorun yok
Ben setup dosyasıyla .ini uzantılı dosyamı alıyorum ağdaki başka bi makinaya kuruyorum, .ini dosyamı da Cnin alına kopyalıyorum. Çünkü connectionstringde kullandığım .ini dosyamı C nin altından çağırıyorum. neyse çalıştırıyorum programı açılıyo form giriyorum verileri tam kaydet diyorum. tak hatayı alıyorum.
Hatada şunu diyo. Sunucuyla bağlantı kurulurken hata oluştu. Bu hata SQL SERVER 2005 e bağlanılırken,SQL server ın uzaktan bağlantılara izin vermediği varsayılan ayarlar altında oluşan durum nedeniyle oluşabilir. (provider:SQL Ağ Arabirimleri Error:26- Belirtilen sunucuyu/örneği bulma hatası.)
hataya bakınca gayet kolayca SQL server ınkurulu olduğu makinaya bağlanamadığını, SQL serverın bağlantısının sağlanmadığını söylüyo. Ama ben SQL i ağda paylaşıma açmayla ilgili nerdeyse bütün yolları denedim. SQL SERVER 2005 SURFACE AREA CONFIGURATION dan remote connections tan local and remote connections ve altta da using both TCP/IP and named pipes işaretli. MSSQL browser ı yeniden başlatıyoum sonra da. Management studio da connections ta allow remote connections to this server tikli. Aynı yerde security tabında server authentication kısmında SQL SERVER ve Windows authentication mode tikli. aklıma gelen her yolu denedim nerdeyse. Acaba bendeki SQL EXPRESS ondan olabilir mi? ama SQL expresi ağda paylaşıma açma diye arattım aynı şeyler hemen hemen ama olmadı bi türlü. Eğer bi fikri olan varsaaaa lütfennnnnnnnn:(:(:(:(


bu arada .ini dosyamda database olarak kendi bulunduğum pc nin (server) adı ve veritabanı ismi var. Benden bağlansın istiyorum diğer makinalar amaa..:(
 

totleben

Asistan
Katılım
25 Mayıs 2007
Mesajlar
291
Reaksiyon puanı
0
Puanları
16
Sql sunucusunun portlarını açtığından eminmisin? Mssql genelde 1433 numaralı portu kullanır.

Eğer antivirüs falan varsa onlarda engelliyor olabilir kapatmanı yada gerekli izinleri vermeni tavsiye ederim.

Aynı anda kayıt girme olayında herhangi bir problem olmaz. Güncelleme olayındada problem olmaz en son kim güncellediyse onun verisi kalır. Bu şekilde bir olayın gerçekleşmesi ise düşük bir ihtimal. Genede önlem almak istersen diğer arkadaşların bahsettiği yöntemlerle bunun önüne geçebilirsin.
 

serious

Asistan
Katılım
18 Mart 2007
Mesajlar
207
Reaksiyon puanı
2
Puanları
0
açıkçası portları hiç denemedim. Açık mı kapalı mı bilmiyorum bile. Ama ben SQL le ilgili ayarlamaları yaptığımda kendisi otomatik açmıyo mudur o portları zaten. Madem öyle o ayarlar ne işe yarıyo yaa:(:( ayrıca local ağ üzerinde paylaştırmak istiyorum ben uzak masaüstü falan değil yani, yine de gerek var mı ki?? zaten sabahtan beri okulda bunu deniyorum. Şimdi yapsam bile deneme imkanım yok:(:(:( bu kadarcık şey nası uğraştırdı beni yaa:(:(
 

totleben

Asistan
Katılım
25 Mayıs 2007
Mesajlar
291
Reaksiyon puanı
0
Puanları
16
Yerel ağdan bağlanman için yerel ağa port açman gerekir. Bilgisayarındaki firewall engeller yoksa.

Yaptığın ayarlar sql'i ağdan gelen istekleride karşılaması içindi. Ama senin makinende firewall varsa firewall gelen tüm istekleri bloke edeceğinden sql sunucunda maalesef istekleri karşılayamaz.

Ayrıca bağlantı cümlesini ini dosyasından değilde app.config dosyasından alman daha mantıklı olacaktır.
 

serious

Asistan
Katılım
18 Mart 2007
Mesajlar
207
Reaksiyon puanı
2
Puanları
0
Yani tüm sorun porttan mı diyorsun.:( Yarın deneyebilirim artık ama inş dediğin gibi yapınca olur.. artık herşeyi denemekten ümitsizliğe kapıldm, açıkçası port olayı aklıma hiç gelmedi ama dediklerin mantıklı inş dediğin gibi olur. Bu arada şu app.config den alma işini biraz açar mısın neden??
 

totleben

Asistan
Katılım
25 Mayıs 2007
Mesajlar
291
Reaksiyon puanı
0
Puanları
16
Olabilecek bir ihtimali seslendiriyorum. Belkide portlardan değil ama onuda kontrol etmelisin.

App.Config'in okuması değiştirmesi çok daha kolaydır. Birçok yerde connection string için otomatik olarak app.config veya web.config dosyasına bakılır. Hata riskini azaltır. Ini dosyalarında kodlama hatası olabilmekte bazen. İllede ansi olarak kaydetmemi isteyen birçok program gördüm. Ini dosyasını ansi kaydetmeyince hata veriyordu.

App.Config kullanırsan en azından c içerisine koyman gerekmez. Çalışan exe'nin yanında olması yeterlidir. Birçok şey senin için daha kolay olur. Belki ini dosyasınıda aynı şekilde yapabilirsin ama neden uğraşasınki zaten daha önce düşünmüşler kolaylık yapmışlar. Sana sadece o kolaylığı kullanmak kalıyor.
 

32.sefo

Doçent
Katılım
1 Ekim 2007
Mesajlar
613
Reaksiyon puanı
2
Puanları
0
Yerel ağdan bağlanman için yerel ağa port açman gerekir. Bilgisayarındaki firewall engeller yoksa.

Yaptığın ayarlar sql'i ağdan gelen istekleride karşılaması içindi. Ama senin makinende firewall varsa firewall gelen tüm istekleri bloke edeceğinden sql sunucunda maalesef istekleri karşılayamaz.

Ayrıca bağlantı cümlesini ini dosyasından değilde app.config dosyasından alman daha mantıklı olacaktır.
Yerel ağdan pcler arası veri aktarmak için;
1) Benimki gibi sql server 2005 kullanıyorsan sql configuration tools altından "sql server 2005 surface area configuration" ile "surface area configuration for services and connections" a tıklıyosun ordan "remote connections" kısmında local and remote connections "using both" seçeneğini seçip kaydediyosun

2) güvenlik duvarında izin verilen programlara sql server 2005 ekliyosun

3) sql serverda ana pcde kullanıcılar olusturuyosun (sql server authentication sa oturumu ile bağlandıktan sonra kullanıcı olusturuyosun) , kullanıcı1,kullanıcı2 diye ekliyosun kaydediyosun. (remote pclerden bu kullanıcılar ile bağlanıyosun; aynı zamanda veri yazma okuma sorunu çıkmıyor.) yeni kullanıcıya sağ tıklayıp properties' den "user mapping" bolumundeki tum tickleri seçiyosun (normalde buna gerek kalmıyordu ama win7'de bağlanmak için bunları yapmam gerekti)

connectionString'in bu formatta olması lazım:
"Data Source=sefer_pc;Initial Catalog=denemeDb;User Id=kullanici1;Password=123;"

bu dediklerimi yaptıktan sonra hala bağlantıda sorun yaşıyorsan: karakartal.sefer@live.nl

ayrıca mixed mode etkin mi?
 

serious

Asistan
Katılım
18 Mart 2007
Mesajlar
207
Reaksiyon puanı
2
Puanları
0
evet etkinleştirdim de ben galiba port olayını atladım ya da senin dediğin gibi güvenlik duvarının izin vereceği programlara SQL server i eklemedim ondan olmadı. Şimdi kurulu bi ağım yok ama yarın ilk iş deneyeceğim bunu.
hala sorun yaşarsam sana başvururum.:( teşekkür ederim. Yarın bu adımları bir bir uygulıycam. İşin kötüsü yarın bu kısmı halletmem gerek programı teslim edicem çünkü:(
 

mc92001

Doçent
Katılım
11 Şubat 2009
Mesajlar
786
Reaksiyon puanı
16
Puanları
18
veritabanınız sql express mi yoksa sql server 2005'mi.
sql server 2005 'de client server mimari uygulamalar gayet basit.
fakat sql express kullanıyorsanız bu iş biraz zorlaşıyor. sanırım sql express aynı anda bir kullanıcının bağlanmasına izin veriyor.
diğer ayarları zaten 32.sefo arkadaşımız ayrıntılı anlatmış.
kolay gelsin.
 

serious

Asistan
Katılım
18 Mart 2007
Mesajlar
207
Reaksiyon puanı
2
Puanları
0
ya arkadaşlar bişey sorucm gerçi bayağı geçti üzerinden ama bu peojede SQL express 2005 kullanmıştım hallettim ama şimdi SQL server 2008 lisanslı var elimde ama onda using both seçeneğini seçtiğimiz surface area network bölümü yok o ayarı nerden yapabilirim bi fikri olan var mı?
 

totleben

Asistan
Katılım
25 Mayıs 2007
Mesajlar
291
Reaksiyon puanı
0
Puanları
16
Management Studioda sql sunucusunun üzerine ters tıkla Properties > Connections > Allow remote connections to this server seçeneğini seçili hale getir.
 

serious

Asistan
Katılım
18 Mart 2007
Mesajlar
207
Reaksiyon puanı
2
Puanları
0
yaptım onu yapmaz mıyım, sonra servisi yeniden başlatayım dedim artık MSSQL server da başlatılmıyo "the request failed or the service did not respond in a timely fashion " hatası alıyorum. bkatım netten şifre değişikliği yapıldıysa olur diyo ki ben yapmadım şifreyle ilgili bişey. izledim anlatılan yolları ama ısrarla başlatmıyo:mad:
 
Üst