[teknik]
(5)
[SQL] "There is already an open DataReader associated with this Com..."
arnold schwarzeneger #371880
C# ve SQL bilgim çok iyi değil, başta onu söyleyeyim.
Bir stream'den sürekli gelen veriyi, SP'ler yardımıyla SQL Server'a yazıyorum. Bir adet SqlDataAdapter'üm var. Bunun Select, Update ve Insert Command'larını da yazdım.
Thread içerisinde, stream'den her veri geldiğinde çağırılan bir methodun içinde,
- gelen veriye ait kayıt table'da var mı diye bakıyorum
- varsa, Datarow'u alıp, BeginEdit ile başlayıp, yeni gelen değerlere göre kolonları değiştiriyorum.
- yoksa, NewRow ile yarattığım yeni DataRow'a gelen değerleri dolduruyorum.
- Ensonda, Adapter.Update'i çağırınca, bazen;
"There is already an open DataReader associated with this Command which must be closed first."
Hatasını alıyorum. Ben sadece Command'ları tanımlıyorum, herhangi bir Datareader tanımlamıyorum ayrıca. Internal olarak tanımlanan Reader'ları da mı kapatmam lazım her Update'ten sonra?
Mevcut fonksiyon bir AutoResetEvent ile korunuyor.
Soru yeterince açık değilse sorun lütfen, işin içinden çıkamadım bir türlü.
Bir stream'den sürekli gelen veriyi, SP'ler yardımıyla SQL Server'a yazıyorum. Bir adet SqlDataAdapter'üm var. Bunun Select, Update ve Insert Command'larını da yazdım.
Thread içerisinde, stream'den her veri geldiğinde çağırılan bir methodun içinde,
- gelen veriye ait kayıt table'da var mı diye bakıyorum
- varsa, Datarow'u alıp, BeginEdit ile başlayıp, yeni gelen değerlere göre kolonları değiştiriyorum.
- yoksa, NewRow ile yarattığım yeni DataRow'a gelen değerleri dolduruyorum.
- Ensonda, Adapter.Update'i çağırınca, bazen;
"There is already an open DataReader associated with this Command which must be closed first."
Hatasını alıyorum. Ben sadece Command'ları tanımlıyorum, herhangi bir Datareader tanımlamıyorum ayrıca. Internal olarak tanımlanan Reader'ları da mı kapatmam lazım her Update'ten sonra?
Mevcut fonksiyon bir AutoResetEvent ile korunuyor.
Soru yeterince açık değilse sorun lütfen, işin içinden çıkamadım bir türlü.
burki ile sorunu çözemedik, hala yardıma ihtiyacım var.
arnold schwarzeneger
ben de bi göreyim mi kodları
kta
connection string içine mars'ı ekleyerek deneyin bir de, thread olduğundan işlemin birisi bitmediğinden diğeri başlıyor olabilir.
msdn.microsoft.com(v=vs.80).aspx
ocanal
ocanal, onu gördüm ben de. Yalnız AutoResetEvent ile aynı anda çağırmayı engellediğimi düşünüyordum.
arnold schwarzeneger
ocanal'ın dediği gibiyse read/write yaptığın methodun başına
[MethodImpl(MethodImplOptions.Synchronized)]
koy. O zaman sorun çıkmaz. AutoResetEvent tam nasıl çalışıyor bilmiyorum.
kta
1