duplicate key value

yokd052

New member
duplicate key value

איך אני יכול לשלוט הבודעה על מפתח כפול באליקציה של ASP 4.0
 

pitoach

New member
תחילה אתה יכול ללמד אותנו מה זה ASP 4.0?!?

הגרסה האחרונה של ASP היא 3
אחרי גרסה 3 עברנו ל ASP.NET

האם אתה מתכוון ל asp.net גרסה 4 ?

* בכל מקרה כדאי לצרף הודעה מלאה ומדוייק שאתה מקבל ומעט קוד רלוונטי אם יש.
 

yokd052

New member
אתה צודק ASP.NET 4.0

הפעולה היא הוספה לטבלה שבהתאם להגדרת הטבלה השדה אינו יכול להיות כפול
לא קבלתי הודעת שגיאה ולא התבצע עדכון
אני רוצה להציג הודעת שגיאה.
לכן אני רוצה לדעת איך יודעים שהתבצעה הוספה בטבלת SQL SERVER 2008
 

pitoach

New member
הבעיה ברורה עתה (אני חושב)

כאשר אתה שולח שאילתה של הוספה של נתונים לטבלה אתה רוצה לקבל אינפורמציה על התוצאה.

הגישה הנפוצה היא קודם לבדוק את הנתונים (ואלידציה) ורק אחרי שהם תקינים להעביר אותם לטבלה (כולל בדיקת כפילויות שניתן לבצע ב AJAX ברקע לפני ששולחים את השאילתה של ה INSERT).

דרך יפה לבצע את מה שאתה רוצה זה פשוט לבדוק כמה רשומות הושפעו מהשאילתה שלך בעזרת המשתנה @@ROWCOUNT של SQL. אתה יכותל לעבוד עם פרוצדורה שתקבל את הפרמטרים שאתה רוצה להכניס לרשומה ותחזיר את מספר הרשומות שהושפעו.

עבודה עם @@ROWCOUNT אתה יכול רלאות כאן לדוגמה
http://stackoverflow.com/questions/2272733/how-to-get-number-of-rows-inserted-by-a-transaction

והדרך הנכונה בדרך כלל היא פשוט לעבוד ישירות עם הודעות השיאה שחוזרות מהשרת. אם אתה נעזר ב ExecuteNonQuery הרי שאתה לא מקבל חזרה אינפורמציה של דטא אבל הרבה מאוד אינפורמציה כן חוזרת. אתה יכול לעבוד עם בלוק TRY ולקבל רק "הצלחה" או "כישלון". אבל אתה יכול גם לבדוק כשלונות מסויימים כמו SqlException.

Try {
// code here
}
catch (SqlException odbcEx) {
// Handle more specific SqlException exception here.
}
catch (Exception ex) {
// Handle generic ones here.
}
 

yokd052

New member
אני מקבל טקסט

האם אפשר לקבל גם קוד מ SQL SERVER 2008
ובצורה זו ליצור טבלת שגיאות
 

pitoach

New member
בהחלט. אתה מקבל טקסט עם קוד מלא

SqlException כולל טקסט וקוד של השגיאה גם כן. אתה יכול לשמור את הנתונים אבל אם אתה מתכוון לשמור את הנתונים הרי שאתה עובד לא נכון

אין הגיון לשלוף נתון רק כדי שללוח אותו שוב למסד הנתונים.

במקרה כזה הייתי עובד עם TRACE או sql extened events ברמת מסד הנתונים שישמר את הנתונים בלוג או בטבלה, ואז אתה לא עושה כלום באפליקציה פרט לבדיקה אם יש שגיאה או לא.

אפשרות נוספת פחות יעילה אבל יותר ידידותית למפתחים שאינם שולטים ב SQL, היא פשוט לבצע הכל דרך פרוצדורה שמורה שהיא כבר תבצע את הפעולה ותשמור את הודעת השגיאה במסד הנתונים ותחזיר לאפליקציה רק הודעה של False או True לפי התוצאה של הצליח או נכשל
 
למעלה