PDA

View Full Version : سوال: مشکل در Update بوسیله 3 کلید



ali_autumnal
چهارشنبه 03 شهریور 1389, 11:11 صبح
باسلام
کسی میتونه بگه اشکال این کد چیه که Update با 2 یا 3 کلید رو قبول نمیکنه

اما با یک کلید بدون خطا Update میشه



MsgCommand.CommandText = "update tblEjareh set inDate='" + strInputDate + "',inTime='" + strTime + "',tedadeDay='" + strTedadeDay + "',Mablagh='" + txtSandoghJameKol.Text + "',Takhfif='" + txtSandoghTakhfif.Text + "',vazeiat='" + strVazeiatFilm + "',idUser='" + strUserInput + "'where idCu='" + txtSandoghCodeCu.Text + "' and idFilm='" + txtSandoghCodeFilm.Text + "' and OutDate='" + strOutDate + "'";

متشکرم
علی پاییزی

ایمان مدائنی
چهارشنبه 03 شهریور 1389, 11:16 صبح
من فقط ميتونم بگم اين روشي كه استفاده كردي اصلا خوب نيست چون راحت ميشه به برنامه ات نفوذ كرد !
اين روش رو استفاده نكن !
از روش پارامتر دهي استفاده كن !



SELECT * FROM ozv WHERE tarikh BETWEEN @tarikh1 and @tarikh2
commm.Parameters.AddWithValue("@tarikh1 ", textbox1.text);
commm.Parameters.AddWithValue("@tarikh2", textbox2.text);

منظور از commm همون SqlCommand است

موفق و پيروز باشيد

Behrang_a
چهارشنبه 03 شهریور 1389, 11:17 صبح
باسلام
کسی میتونه بگه اشکال این کد چیه که Update با 2 یا 3 کلید رو قبول نمیکنه

اما با یک کلید بدون خطا Update میشه

من تازه اينجا عضو شدم واسه همين شايد بعضي از اصطلاحات رو متوجه نميشم ، منظورتون از كليد چيه ؟ يعني Primary Key ديتابيس ؟
وقتي 3 تا هست چه اشكالي ازت ميگيره ؟
--------------------

من فقط ميتونم بگم اين روشي كه استفاده كردي اصلا خوب نيست چون راحت ميشه به برنامه ات نفوذ كرد !
اين روش رو استفاده نكن !


موفق و پيروز باشيد
از CommandBuilder هم ميتونه استفاده كنه

ایمان مدائنی
چهارشنبه 03 شهریور 1389, 11:22 صبح
البته اين هم بگم شما نميتوني تو يك جدول چندتا كليد اصلي داشته باشي و فقط يك گليد اصلي ميتوني داشته باشي و بقيه را بايد كليد فرعي تعريف كني !
اگر هم مي خواهي مقار تكراري قبول نكنن از ايندكس استفاده كن !

ali_autumnal
چهارشنبه 03 شهریور 1389, 11:37 صبح
البته اين هم بگم شما نميتوني تو يك جدول چندتا كليد اصلي داشته باشي و فقط يك گليد اصلي ميتوني داشته باشي و بقيه را بايد كليد فرعي تعريف كني !
اگر هم مي خواهي مقار تكراري قبول نكنن از ايندكس استفاده كن !

مطمئنی نمیشه با 3 کلید Update کرد!!!!!!؟؟

با 7 و حتی 8 کلید هم Update کردم!

فقط این یکی خطا میده. تا حالا باهاش برخورد نکرده بودم.

ایمان مدائنی
چهارشنبه 03 شهریور 1389, 11:39 صبح
نه مطمئن نيستم !
شما از روش پارامتر دهي استفاده كن حتما جواب ميده !

ali_autumnal
چهارشنبه 03 شهریور 1389, 11:40 صبح
من تازه اينجا عضو شدم واسه همين شايد بعضي از اصطلاحات رو متوجه نميشم ، منظورتون از كليد چيه ؟ يعني Primary Key ديتابيس ؟
وقتي 3 تا هست چه اشكالي ازت ميگيره ؟
--------------------

از CommandBuilder هم ميتونه استفاده كنه


آره منظورم همون Primary Key هست.

javad_r_85
چهارشنبه 03 شهریور 1389, 11:51 صبح
مطمئنی نمیشه با 3 کلید Update کرد!!!!!!؟؟

با 7 و حتی 8 کلید هم Update کردم!

فقط این یکی خطا میده. تا حالا باهاش برخورد نکرده بودم.

با سلام دوست عزیز این کدها راامتحان کن



SqlCommand cmd1 = new SqlCommand("update costomers set name=@name,tel=@tel where id=@id and (name=@name1) ", c);
cmd1.Parameters .AddWithValue ("@name","iman");
cmd1.Parameters .AddWithValue ("@tel","123");
cmd1.Parameters .AddWithValue ("@id",22);
cmd1.Parameters.AddWithValue("@name1", "javad");
c.Open();
cmd1.ExecuteNonQuery();
c.Close();
MessageBox.Show("updated");







چند نکته را فقط متذکر شوم که شما نیاز ندارید که با 7 یا 8 تا کلید به روز کنید فقط کافی در جدول یک کلید اصلی منحصر به فرد تعریف کنید و از آنجایی که این کلید غیر قابل تکرار است می تونید از این کلید در کارهایتانمانند حذف و به روز کدن استفاده کنید و نیاز به نوشتن کد اضافی هم نیست نکته دیگر اینکه آپدیت کردن خیلی خطرناک میشه زمانی که از کلید اصلی استفاده نکنید بعنی احتمال داره کل رکوردهای جدولتان تغییر کند پس همیشه از کلید اصلی استفاده کنید نکته دیگر اینکه در به کار بردن رشته ها و نام ها بهتره که از کاراکتر N حتما قبل مقدار استفاده کنیم این به معنی Unicod می باشه و از به هم ریختگی جلوگیری میکنه مثلا


'جواد'name=N

Behrang_a
چهارشنبه 03 شهریور 1389, 12:04 عصر
آره منظورم همون Primary Key هست.

شدنش كه ميشه تو SQL چند تا كليد تعريف كرد اما فقط يكيش ميتونه به عنوان Identity اون جدول تعريف بشه.
فكر كنم اگه ايرادي كه ازت ميگيره رو متنش رو بزاري خيلي كمك كنه.

mmd2009
چهارشنبه 03 شهریور 1389, 12:04 عصر
البته اين هم بگم شما نميتوني تو يك جدول چندتا كليد اصلي داشته باشي !


با سلام.

چرا میشه داشت. اصلا مشکلی از این بابت نیست.

FastCode
چهارشنبه 03 شهریور 1389, 12:19 عصر
میشه هر چند تا دوست دارید تعریف کنید.
هر چند تا هم بخواهید میتونید autoincrement بکنید.فقط از دومی به بعد یه مقدار سخت میشه.
توی stackoverflow نمونه هاش هست.

javad_r_85
چهارشنبه 03 شهریور 1389, 13:22 عصر
شدنش كه ميشه تو SQL چند تا كليد تعريف كرد اما فقط يكيش ميتونه به عنوان Identity اون جدول تعريف بشه.
فكر كنم اگه ايرادي كه ازت ميگيره رو متنش رو بزاري خيلي كمك كنه.

سلام دوستان این که بحث نداره. میشه این کارو کردولی از لحاظ نرمال سازی و یکپارچگی داده مشکل داره و اصلا اسمشو گذاشتن کلید یعنی باید یه دونه باشه و منحصر به فرد .در مواقع خاصی از چندین کلید استفاده میکنند.

mmd2009
چهارشنبه 03 شهریور 1389, 13:48 عصر
موقع از دو کلید استفاده میکنند که نشه از یک کلید استفاده کرد. اینم جز پایگاه داده هاست. و البته جایی ننوشته حتما باید یکی باشه. و شما میتونید کل پایگاه دادتون رو بکنید کلید که سر جمعش بشه یک کلید. بستگی داره داده های داخل جدولت چی باشه.

ایمان مدائنی
چهارشنبه 03 شهریور 1389, 13:53 عصر
بچه ها جاي گير دادن به كليد يا شاه كليد بياييد مشكله اين بنده خدا رو حل بكنيم !:قهقهه:

mmd2009
چهارشنبه 03 شهریور 1389, 13:58 عصر
خب javad_r_85 (http://www.barnamenevis.org/forum/member.php?u=140635) جوابش رو تو صفحه قبلی داده. منتظرم تا بیاد ببینیم مشکل حل میشه اینطوری یا نه.

اتفاقا بحث خیلی خوبی هست چون هنوز دوستان نمیدونن چندتا کلید هم میشه واسه یک جدول گذاشت

حجتی نیا
چهارشنبه 03 شهریور 1389, 15:27 عصر
دوستان سری یه این لینک بزنید (پست 11)
http://barnamenevis.org/forum/showthread.php?t=224852&highlight=%DA%A9%D9%84%DB%8C%D8%AF
اگه به اینصورت انجام بدین، قطعا در update هم مشکلی بوجود نمیاد و نوشتن کوئری هم آسون تره ..
درضمن خیلی خوب میشد اگه سوالو در بخش sqlserver مطرح میکردین ..

Behrang_a
چهارشنبه 03 شهریور 1389, 16:11 عصر
درضمن خیلی خوب میشد اگه سوالو در بخش sqlserver مطرح میکردین ..

سئوال اصليش ربطي به SQL نداشت دنبال ايراد برنامش بود !

حجتی نیا
چهارشنبه 03 شهریور 1389, 16:54 عصر
سئوال اصليش ربطي به SQL نداشت دنبال ايراد برنامش بود !
از اونجایی که تو کوئری مشکل بوجود اومده، واسه همین گفتم .. در ضمن فک کنم اگه طبق اون لینک عمل بشه، نوشتن کوئری آسونتر میشه ..

sds1920
چهارشنبه 03 شهریور 1389, 18:01 عصر
آخه چه error ی می ده؟
همینجوری که نمی شه.n تا error توی C# هست که هر کدوم راه حل خودش رو داره.

ali_autumnal
پنج شنبه 04 شهریور 1389, 12:14 عصر
سلام دوستان این که بحث نداره. میشه این کارو کردولی از لحاظ نرمال سازی و یکپارچگی داده مشکل داره و اصلا اسمشو گذاشتن کلید یعنی باید یه دونه باشه و منحصر به فرد .در مواقع خاصی از چندین کلید استفاده میکنند.

سلام ببخشيد كه دير آمدم.

واقعا سرم شلوغ بود.

اما دوست عزيز بعضي وقت ها شما مجبور ميشويد كه با استفاده از كليدهاي حاضر اعمال محدوديت كنيد. و تعريف كليد ديگري سرباري خواهد داشت.

محدويت: مثلا ميتونيد با كليد قرار دادن كد مشتري و تاريخ در جدول پرداختي ها محدوديت پرداخت بيش از يكبار در يك روز را اعمال كني.

در اين حالت كاربر فقط ميتونه يكبار در هر روز مبلغي را پرداخت كند.

اما اگه بخواي كليد ديگه اي به اين جدول اختصاص بدي مجبورا كد براي اعمال محدوديت خواهي نوشت.

ali_autumnal
پنج شنبه 04 شهریور 1389, 12:45 عصر
آخه چه error ی می ده؟
همینجوری که نمی شه.n تا error توی C#‎ هست که هر کدوم راه حل خودش رو داره.

خطاي نامربوط بودن ديتا ها رو ميده.

كه البته هيچ نامربوط اي وجود ندارد.

چون با يك كليد آپ ديت ميشه.