PDA

View Full Version : تشخيص آني يك ركورد



mohammad-gh
پنج شنبه 21 آبان 1388, 12:38 عصر
سلام
در پروژه مديريت SMS‌ نياز دارم كه هر پيامي كه ميرسد رو بندازم داخل تيبل و زود پاكش كنم (به خاطر ظرفيت سيم كارت)
حالا مي خواهم ببينم چطور ميشه به محض اينكه ركوردي به اين تيبل بانكم اضافه شد باخبر بشم (تا شايد پاسخي براي اون بدم)
يعني تشخيص آني اضافه شدن ركورد ؟

DoDoklak
پنج شنبه 21 آبان 1388, 18:42 عصر
شاید کلاس System.Data.SqlClient.SqlDependency کمکتان کند و بتوانید از سرویس Notifications Service استفاده کنید که با کمک Broker Service کار میکند.

به عنوان مثال شما میتوانید دستور TSQL-SELECT ای مشخص کنید و سپس در صورتی که در سرور دستوری اجرا شد که نتیجه اش تغییر محتویات دیداری SELECT شما باشد، مطلع شوید و مثلاً نمایه شبه گرایدی برنامه را به روز کنید.

برای این امر دو کلاس در دات نت داریم که گمانم استفاده از System.Data.SqlClient.SqlDependency ساده تر باشد.

مرجع MSDN کلاس مذکور:
msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency.aspx

فعال سازی قابلیت مذکور با بیشترین هماهنگی و کمترین مشکل در آینده در SQLServer و دیتابیس مربوطه:

USE [databasename];

ALTER DATABASE [databasename] SET ENABLE_BROKER;

CREATE QUEUE ContactChangeMessages;

CREATE SERVICE ContactChangeNotifications
ON QUEUE ContactChangeMessages
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);

ALTER DATABASE [databasename] SET ANSI_NULLS ON;

ALTER DATABASE [databasename] SET ANSI_PADDING ON;

ALTER DATABASE [databasename] SET ANSI_WARNINGS ON;

ALTER DATABASE [databasename] SET CONCAT_NULL_YIELDS_NULL ON;

ALTER DATABASE [databasename] SET QUOTED_IDENTIFIER ON;

ALTER DATABASE [databasename] SET NUMERIC_ROUNDABORT OFF;

ALTER DATABASE [databasename] SET ARITHABORT ON;

(تست نکردم ولی گمانم سرویس مذکور روی express وجود نداشته باشد، اما اگر هم نباشد احتمال زیادی دارد جزء advanced های express دانلود و نصب شود.)

شرایط دستور TSQL-SELECT (هر SELECT ای مجاز نیست):
msdn.microsoft.com/en-us/library/ms181122.aspx

نمونه کد:
msdn.microsoft.com/en-us/library/a52dhwx7.aspx
من اختلاف زمانی خاصی مشاهده نکردم ...
ولی بحرحال امکان دارد در یک برنامه شبکه با توجه به تعداد درخواست و تراکنش و ترافیک شبکه تعداد کلاینت منتظر پیام و... اختلاف زمانی رخ دهد، وجود اختلاف زمانی برای شبکه امری منطقی و قابل تصور است ولی نکته ای که وجود دارد ان است که من بعید میدانم اگر این کار را با روش و الگوریتم های دیگری انجام دهید بتوانید به بازدهی و سرعت بیشتری از سرویس آماده مذکور که مخصوص این امر طراحی شده برسید.

=====

نمونه سورس کد هم دقیقاً اگر شما سورس های همین صفحه زیر را در یک برنامه کپی کنید، کار خواهد کرد.
msdn.microsoft.com/en-us/library/a52dhwx7.aspx
یعنی کد اضافه ای نمیخواهد.

سمپل فوق گفته یک grid و list و label روی فرم قرار دهید ولی قرار دادن یک listbox هم کافی است.
اگر sqlserver2008 داشته باشید میتوانم همین کدها را برنامه کنم و برایتان بگذارم.
(چون mdf های رایانه من در sqlserver2005 بازنخواهد شد.)

اگر خودتان هم خواستید فقط به محدودیت های SQL دقت کنید:
msdn.microsoft.com/en-us/library/ms181122.aspx

مثلاً این SQL با دو بند مفاد فوق مغایر است و مجاز نیست:

SELECT * FROM tablename;

ولی این یکی صحیح است:

SELECT dbo.tablename.field1, dbo.tablename.field2 FROM dbo.tablename;

البته دستور TSQL ای را که دادم را هم فقط یکبار در دیتابیستان اجرا کنید.

mohammad-gh
جمعه 22 آبان 1388, 13:13 عصر
متشكرم دوست عزيز
راستش فكر ميكردم از اين راحتتر بشه اين امكان را فراهم آورد
آيا اين روش پروسس و بار زيادي را رو سيستم ايجاد نميكنه؟

اگر sqlserver2008 داشته باشید میتوانم همین کدها را برنامه کنم و برایتان بگذارم.

بله من از 2008 استفاده مي كنم

DoDoklak
شنبه 23 آبان 1388, 09:47 صبح
به هر حال شما میخواهید از امکانات پیشرفته بانک اطلاعاتی استفاده کنید


دانلود مستقیم به حجم نیم مگا بایت:
support.h02.ir/fwlink/?LinkId=1006235907

برنامه فعلی اول سعی میکند با ConnectionString پیشفرض خودش به سرور وصل شود و اگر نتوانست دیالوگی برای پرسش ConnectionString باز میکند.

- برنامه تشخیص میدهد که دیتابیس اش Attach شده یا خیر و در صورت لزوم دکمه های Attach و Detach را فعال میکند.

برنامه 4 دکمه دارد.
Attach برای الحاق دیتابیس به سرور.

Detach برای جداکردن فایل دیتابیس
(بهتر است آخر که کارتان با برنامه تمام شد یکبار اجرا کنید تا فایلهای دیتابیس آزاد شوند و راحت بتوانید Delete کنید.)

Start برای شروع عملیات مورد بحث تاپیک

Sample Insert که با دستورات ایزوله و جداگانه یک سطر در جدول نصب میکند و میبیند که برنامه متوجه این تغییر میشود.
(اگر هم باور ندارید(!) و شک دارید میتوانید محتویات جدول مربوطه را با یک برنامه دیگر تغییر دهید! مثلاً از خود SSMS استفاده کنید.)

=====

نمونه exe را میتوانید در شاخه bin پیدا و اجرا کنید.

خلاصه مشکل خاصی ندارد و با این برای نمونه و آزمایشی است ولی کد نویسی نسبتاً کاملی دارد.

=====

من برنامه را در دو سیستم جداگانه با sqlexpress تست کردم.
اولی فقط sqlexpress داشت و برنامه error نداد ولی کار هم نکرد.
دومی sqlexpress و develop رویش نصب بود و من فقط از sqlexpress استفاده کردم ولی کار کرد!
(یعنی سرویس مذکور که با develop نصب شده روی express هم جواب داده)


منبع _H2_

راستی از چه کامپونینتی برای ارسال و دریافت SMS استفاده کردی من از چند تا استفاده کردم :Mcore,Kylix,ActiveExpress همشون راحت SMS میفرستن ولی تو گرفتن مشکل دارن Kylix نسبتا بهتره و تو گوشی های Nokia N Series نمیتونه Inbox مربوط به sim و یا Phone را بخونه ولی وقتی از یک Mode GSM استفاده میکنم میتونه بخونه نظر شما چیه؟

mohammad-gh
شنبه 23 آبان 1388, 18:42 عصر
سلام دوست عزيز
برنامه رو آزمايش مي كنم، ممنون از كمكت
در مورد كامپوننت
من بعد از بررسي هر سه كامپوننت و به دليل آشنايي بيشتر با vb.net‌ و نيافتن عيب دست و پا گير، mcore‌رو انتخاب كردم البته ويرايش 1.8 ، در مورد kylix ‌هم تحقيق و آزمايش زيدي كردم ولي مزيتي نسبت به mcore ‌درآن نيافتم (به غير از ك رك كه رايگان نيست)، ActiveExpress را هم به خاطر پروسس هاي زيادي كه روي كاامپيوتر ايجاد مي كرد امتحان هم نكردم

با ز هم ممنون ، امتحان مي كنم و شايد دوباره زحمت دادم