PDA

View Full Version : مشکل با SqlDependency



Xcalivorse
چهارشنبه 02 شهریور 1390, 13:56 عصر
با سلام. دوستان عزیز می خوام از کلاس SqlDependency استفاده کنم. چون نیاز دارم که اگر تغییری در جداولم اتفاق افتاد به صورت خودکار بفهمم. کدی که نوشتم اینه :





privatevoid Btn_Start_Click(object sender, EventArgs e)
{
String StrCon = @"Data Source=YAHYA\SQL2005;Initial Catalog=Test;USER ID=Sarmadi;PWD=1";
SqlConnection con = newSqlConnection(StrCon);

SqlCommand cmd = newSqlCommand("Select [Name],Number FROM dbo.Members", con);
// cmd.Notification = null;
SqlDependency s = newSqlDependency(cmd);
SqlDependency.Start(StrCon);
s.OnChange += newOnChangeEventHandler(MyOnChanged);
con.Open();

SqlDataReader rdr = cmd.ExecuteReader();
// rdr.Close();
}
 
staticvoid MyOnChanged(object caller, SqlNotificationEventArgs e)
{
//to test place a break point here
//and change any data in the specified table
string msg = "Notified";
MessageBox.Show(msg);
}


اما وقتی که روی دکمه Start کلیک میکنم رویداد OnChange اتفاق میافته و MessageBox نمایش داده میشه و تمام. دیگه هر تغييري توی جدول Member میدم هیچ اتفاقی نمیافته. لطفا راهنمایی کنید.
با تشکر فراوان

Xcalivorse
چهارشنبه 02 شهریور 1390, 14:53 عصر
در ضمن من پیکربندی های مربوط به SQL رو انجام دادم و دیتابیسم رو Enable_Broker کردم.

Xcalivorse
چهارشنبه 02 شهریور 1390, 16:06 عصر
دوستان عزیز. آقایون خانمها. مدیران بخش. یعنی یکی نیست با SqlDependency کار کرده باشه ؟!

navidkhalilian
چهارشنبه 02 شهریور 1390, 16:13 عصر
سلام دوست عزیز من کار نکردم اما چون خودم هم دنبال این قضیه هستم اتفاقی به این مطلب بر خوردم که نوشته بود باید دستورات در این قالب باشه:

Select dbo.Members.[Name],dbo.Members.Number FROM dbo.Members

می خوای امتحان کن شاید جواب بده.

Xcalivorse
چهارشنبه 02 شهریور 1390, 17:06 عصر
دوست عزیز اینطوری مشکل اجرا شدن الکی رویداد OnChange حل میشه ولی وقتی تابع زیر رو اجرا میکنم برنامه هنوز هم هیچ عکس العملی رو نشون نمیده.



private void Btn_Query_Click(object sender, EventArgs e)
{
SqlConnection con = new
SqlConnection(@"Data Source=YAHYA\SQL2005;Initial Catalog=Test;USER ID=Sarmadi;PWD=1");
con.Open();
SqlCommand cmd = new SqlCommand("Select dbo.Members.Name,dbo.Members.Number FROM dbo.Members", con);
cmd.ExecuteNonQuery();
con.Close();
}

sia_2007
چهارشنبه 02 شهریور 1390, 17:24 عصر
این آیتم واقعا چرنده، بهتره از Service Broker استفاده کنی
یه Service و یه Queue درست کن
بعد یه Trigger بذار، INSERTED ها رو با for xml بریز تو Queue
بعد یه Thread با #C درست کن و این رو اجرا کن
WAITFOR ( RECEIVE * FROM QueueNameتوجه کن خوندن Queue ات باید با کد #C باشه
نه با Proc
تو اینجا یه آموزش نیم بند موجود هستش، ولی باید روش کار کنی
http://www.codeproject.com/KB/database/SQLNotificationRequest.aspx
ولی هر چی باشه از SQL Dependency بهتره

توجه داشته باش، باید به یه وضعیتی برسی، که هر وقت Trigger گذاشت تو Queue، برنامت در جا بره بخونتش، نه این که مدام رو Queue کوئری بگیره و یا هر کندی دیگه ای
موفق باشی

ببین باید از اینی که هست خیلی راحتترش کنی، من باهاش یه Tools نوشتم
توجه کن که میتونی با Linq to XML با اون Stram خروجیش کار کنی

Xcalivorse
چهارشنبه 02 شهریور 1390, 21:55 عصر
یعنی راه دیگه ای وجود نداره که بشه از خود SqlDependency استفاده کرد ؟

navidkhalilian
پنج شنبه 03 شهریور 1390, 01:40 صبح
سلام دوست عزیز.اینجا رو ببین خالی از لطف نیست.موفق باشید
http://msdn.microsoft.com/en-us/library/a52dhwx7(v=vs.80).aspx

navidkhalilian
پنج شنبه 03 شهریور 1390, 01:40 صبح
سلام دوست عزیز.اینجا رو ببین خالی از لطف نیست.موفق باشید
http://msdn.microsoft.com/en-us/library/a52dhwx7(v=vs.80).aspx

pjimax
سه شنبه 31 شهریور 1394, 14:45 عصر
ببین باید از اینی که هست خیلی راحتترش کنی، من باهاش یه Tools نوشتم
توجه کن که میتونی با Linq to XML با اون Stram خروجیش کار کنی[/QUOTE]

حق با شماست sql dependency در برنامه ui رو خیلی کند میکنه
لطفا روشی که پیشنهاد کردید رو بیشتر توضیح بدید