PDA

View Full Version : عدم درج رکورد تکراری



raziyehbazargan
یک شنبه 05 شهریور 1391, 07:41 صبح
سلام دوستان

چطور میتونم کنترل کنم که کاربر رکورد تکراری درج نکنه؟؟؟

ممنون میشم با استفاده از کلاس توضیح بدید ..... و اینکه اگر بخوام تو دیتابیس کنترل کنم به چه صورت است؟؟

raziyehbazargan
یک شنبه 05 شهریور 1391, 08:13 صبح
یکی از فیلدهایی که نمیخواستم کاربر تکراری وارد کنه ایندکس کردم و در زمان اجرا در صورت تکراری بودن پیغام خطا میده اما چظور میتونم پیغامشو کنترل کنم که از برنامه خارج نشه؟؟؟

91856:متفکر::متفکر::متفکر::متفک ر::متفکر:

veniz2008
یک شنبه 05 شهریور 1391, 09:31 صبح
سلام. تا جایی که من میدونم ایندکس برای افزایش سرعت کار با رکوردها مورداستفاده قرار میگیره نه برای تکراری بودن رکوردها. شما برای جلوگیری از درج رکورد تکراری باید فیلد کلید رو ملاک قرار بدید و قبل از ثبت اول یه select بزنید و نتیجه رو چک کنید که آیا جواب داشته یا نه. اگر جواب داشت یعنی قبلا ثبت شده و کاری انجام نمیدی ولی اگه وجود نداشت اونوقت رکورد رو درج میکنی. منظورتون از اینکه در دیتابیس چک کنی چیه؟ منظورتون استفاده از stored procedure هست؟

raziyehbazargan
یک شنبه 05 شهریور 1391, 09:37 صبح
سلام. تا جایی که من میدونم ایندکس برای افزایش سرعت کار با رکوردها مورداستفاده قرار میگیره نه برای تکراری بودن رکوردها. شما برای جلوگیری از درج رکورد تکراری باید فیلد کلید رو ملاک قرار بدید و قبل از ثبت اول یه select بزنید و نتیجه رو چک کنید که آیا جواب داشته یا نه. اگر جواب داشت یعنی قبلا ثبت شده و کاری انجام نمیدی ولی اگه وجود نداشت اونوقت رکورد رو درج میکنی. منظورتون از اینکه در دیتابیس چک کنی چیه؟ منظورتون استفاده از stored procedure هست؟

دوست عزیز ... روش بهتر تا جایی که خوندم استفاده از Trigger هاست....اما طریقه استفاده رو نمیدونم و اینکه استفاده از select ساده ترین روشه که ترجیح میدم استفاده نکنم.. کلید اصلی من Auto number هست و من مقادیر مثل اسم اشخاص رو نمیخوام تکراری وارد بشه ...کلا....میخوام اصولیشو یاد بگیرم..

Arash_janusV3
یک شنبه 05 شهریور 1391, 10:01 صبح
به نظر من از همون select استفاده کنید
Trigger در زمان insert یا update کاربرد بهتری دارد
ولی شما قبل از انجام عملیات باید چک کنید
بهتره جدول رو در یک DataTable بریزید و از اون برای چک کردن استفاده کنید

raziyehbazargan
یک شنبه 05 شهریور 1391, 10:06 صبح
به نظر من از همون select استفاده کنید
Trigger در زمان insert یا update کاربرد بهتری دارد
ولی شما قبل از انجام عملیات باید چک کنید
بهتره جدول رو در یک DataTable بریزید و از اون برای چک کردن استفاده کنید

مرسی از راهنماییتون ..ممنون میشم در این مورد راهنمایی کنید
یکی از فیلدهایی که نمیخواستم کاربر تکراری وارد کنه ایندکس کردم و در زمان اجرا در صورت تکراری بودن پیغام خطا میده اما چظور میتونم پیغامشو کنترل کنم که از برنامه خارج نشه؟؟؟

tooraj_azizi_1035
یک شنبه 05 شهریور 1391, 12:53 عصر
هنگامی که کاربر مقدار سلول را وارد کرد شما می بایست اون رو Validate کنید. می توانید اون مقدار رو با کد زیر در جدول مربوطه جستجو کنید:


NorthwindDataSet.CustomersRow customersRow = northwindDataSet1.Customers.FindByCustomerID("ALFKI");


یا

string s = "primaryKeyValue";
DataRow foundRow = dataSet1.Tables["AnyTable"].Rows.Find(s);

if (foundRow != null)
{
MessageBox.Show(foundRow[1].ToString());
}
else
{
MessageBox.Show("A row with the primary key of " + s + " could not be found");
}


با متد Select:

DataRow[] foundRows;
foundRows = dataSet1.Tables["Customers"].Select("CompanyName Like 'A%'");

raziyehbazargan
یک شنبه 05 شهریور 1391, 14:14 عصر
هیچ دلیلی برای اینکه برنامه در صورت برخود به این خطا خارج بشه وجود نداره .
شما اول باید گزینه ی Throw را بردارید. در ضمن تنظیم Debugger رو باید تغییر بدید که خطاهای بیرونی مثل SQL باعث Halt شدن (خروج ناگهانی) نشه

خطاهای SQL رو میتوانید با استفاده از کلاس SQL Exception بهتر مدیریت کنید. باید یک Reference به کتابخانه ی SQL managment اضافه کنید.
گزینه ی Throw را کلا بردارید و هیچ کدی در قسمت Catch ننویسید ببینید آیا برنامه Halt میشه یا نه .

در VS به صورت پیشفرض خطاهای پیش بینی نشده مثل این نباید برنامه رو از کار بندازه
یکبار هم نسخه ی Release رو اجراکنید تا ببینید بدون Debugger هم خروج پیش میاد یا نه .

شما میتوانید یک مدیریت خطا در کلاس Program.cs اضافه کنید تا خطاهای پیش بینی نشده در همه جای برنامه رو مدیریت کنه و نگذاره برنامه خارج بشه
در کل به نظر من برمیگرده به تنظیمات

ممنون میشم یه مقدار برام بازش کنید...
تنظیم Debugger رو باید تغییر بدید که خطاهای بیرونی مثل SQL باعث Halt شدن (خروج ناگهانی) نشه؟؟
شما میتوانید یک مدیریت خطا در کلاس Program.cs اضافه کنید تا خطاهای پیش بینی نشده در همه جای برنامه رو مدیریت کنه و نگذاره برنامه خارج بشه
؟؟؟

nilmil_nil
دوشنبه 06 شهریور 1391, 11:09 صبح
دوستان عزیز بهترین راه تریگره چرا اینقدر دور میزنید
همه چیو که حتما نباید با C# و کد حل کرد پس SQl اینجا چیکارست

raziyehbazargan
دوشنبه 06 شهریور 1391, 12:15 عصر
دوستان عزیز بهترین راه تریگره چرا اینقدر دور میزنید
همه چیو که حتما نباید با C# و کد حل کرد پس SQl اینجا چیکارست

دوست عزیز مرسی از راهنماییتون منم دنبال اینم که این کارو با کد نویسی انجام ندم ممنون میشم کامل تر توضیح بدید.من با تریگر کار نکردم و آشنایی ندارم

tooraj_azizi_1035
دوشنبه 06 شهریور 1391, 22:43 عصر
در وب سایت farsimsdn نحوه Validation در DataGrid رو دنبال کن:

http://www.farsimsdn.somee.com/default.aspx?id=108

nilmil_nil
سه شنبه 07 شهریور 1391, 00:55 صبح
دوست عزیز این دستور تریگر رو رو جدولت اعمال کن البته با کمب تغییرات که مربوط به جدول خودت بشه

Create TRIGGER [dbo].[BoxDuplicateCheck]
ON [dbo].[Boxes]

after INSERT, UPDATE/*, DELETE */
AS
if(select count(*) from Boxes,inserted where Boxes.Box_name=inserted.Box_name
)<>1
rollback transaction

اگه متوجه نشدی بگو بیشتر راهنمایییت کنم