RegisterClientScriptBlock - מעניין:

דונג

New member
new ?

אם אינני טועה, ההבדל בין :
OleDbConnection myConn;​
לבין :
myConn = new OleDbConnection(....);​
(בלי קשר לכך שאפשר לעשות זאת בשורה אחת) הוא, שבשורה הראשונה הצהרתי על משתנה MyConn מסוג מסויים, ובשורה השניה הענקתי לו חיים, הקצתי לו מקום בזכרון, ורק כעת ניתן להשתמש בו. אם כך, מדוע בקוד הבא
OleDbConnection myConnection = new OleDbConnection(myConnString); OleDbCommand myCommand = new OleDbCommand(mySelectQuery,myConnection); myConnection.Open(); OleDbDataReader myReader; myReader = myCommand.ExecuteReader();​
ל myReader לא מבצעים new, אלא ישר משתמשים בו ?
 

דונג

New member
כנראה לא הסברתי טוב בעבר, אנסה שוב:

יש לי מסך ב WEB שנכתב ב #C. יש את קובץ ה aspx שמכיל את הגדרות ה HTML לעיצוב המסך. ויש את קובץ ה aspx.cs שמכיל את הקוד המתבצע בצד השרת. במסך יש כפתור, כאפשר המשתמש לוחץ עליו, מופעלת הפרוצדורה בצד שרת, הנקראת מן הסתם
private void MinHastamButton_Click(object sender, System.EventArgs e)​
בתוך הפרודצורה הזו כתוב קוד צד שרת, העושה פעילות כלשהי (מתחבר לבסיס נתונים, מזין מידע, מעדכן, סוגר אותו וכו' וכו'). כאשר הפעילות מסתיימת, אני רוצה שיופיע לגולש הודעת Internet Explorer ובה כתוב טקסט כלשהו (למשל : "הפעילות הסתיימה בהצלחה"). (alert). כלומר, אני צרך את היכולת, מתוך קוד צד השרת של פונקצית הלחיצה על הכפתור, להריץ סקריפט (alert ב JS למשל) שירוץ בצד הלקוח. קראתי על RegisterClientScriptBlock, הבנתי שזה לא עוזר לי. כיצד בכל זאת אני מיישם את הדרוש לי ? תודה רבה !
 

דונג

New member
תפיסת שגיאות :

מהי הדרך המקובלת לתפוס שגיאות ולטפל בהם, במקום שהאפליקציה תעוף ? למשל, אם אני מנסה לפתוח בסיס נתונים, ולא מצליח, או אם אני מבצע Insert לתוך טבלה, אבל הוא נכשל (סינקטס לא נכון למשל), וכו'. האם משתמשים בבלוק try ו catch ? אם כן, אפשר הסבר קצר ? (+דוגמא יהיה בכלל מעוללה :)) אם לא, כיצד ? תודה !
 

yuval k

New member
בדוגמא שנתת...

הפקודה ()ExecuteReader מחזירה אובייקט מאותחל מסוג OleDbDataReader. אתה לא "ישר משתמש בו" - ()ExecuteReader מגדירה אותו בעבורך, ומחזירה אותו - כשהוא מוכן לעבודה. אתה קולט אותו אל תוך משתנה, וכך אתה יכול לעבוד איתו.
 

Zeliran

New member
..

בעיקרון אפשר להשתמש ב try ו catch אבל אם אני לא טועה, יש כל מיני סוגים ודרכים לתפוס שגיאות במהלך ריצה דוגמה ל try ו catch
try { //מה שאתה רוצה לעשות... } catch (Exception ex) { מחזיק בתוכו את השגיאה, עכשיו פשוט צריך להציג למשתמש את השגיאה.. למשל MessageBox.Show ("Error: "+ex); }​
במקרה הזה, כאשר תהיה שגיאה ב try אז התוכנית תפתח חלון בו תוצג השגיאה למשתמש
 

דונג

New member
מהן האופציות חוץ מ Try ו Catch ?

במה נוהגים בדרך כלל להשתמש ? ואם כבר התחלנו ב Try ו Catch : 1. איך אני יודע מה אני יכול לתפוס ב Exception ex ? למשל בעת ביצוע משפט INSERT, מה יכול לעוף שגוי ? 2. יש קבוע Exception לכל שאר השגיאות, כלומר, אם משהו עף, ושום Catch לא תפס אותו, אז הוא יתפס ע"י ב Exception הזה ? 3. אתה יכול לעשות MessageBox מתוך קוד צד שרת, ויפתח חלון על הודעה ? מה המקביל שלו ב #C ? המון תודה !
 

gilad g

New member
תשובות ../images/Emo26.gif

אין עוד אופציות חוץ מ-catch ו-try. כמו שכבר נאמר לך, זוהי הדרך לתפיסת שגיאות בדוט נט. 1. דברים רבים יכולים להיות שגויים. רשימה חלקית ביותר: שם משתשמ / סיסמה למסד הנתונים שגוי, משפט Insert שגוי, חוסר בהרשאות למסד הנתונים, ועוד ועוד. כמובן שה-CLR יתפוס את השגיאה בעצמו, ויציג מין שגיאה ג'נרית מכוערת כזאת, אבל יותר יפה ואינטואיטיבי למשתמש, אם תוצג הודעת שגיאה מותאמת אישית משלך. 2. לא הבנתי. 3. אמרתי לך, כבר - משתמשים ב-RegisterClientScriptBlock -
RegisterClientScriptBlock("myscript","<script language='javascript'>alert("Hello!");</sc"+"ript>");​
 

דונג

New member
לא הבנת.... :)

1. הכוונה היתה כיצד אני תופס את השגיאות ומבחין בינהם. למשל, איך אני תופס את השגיאה "משפט Insert שגוי" ? 2. אם אני לא רוצה להבין בין כל מיני שגיאות ספציפיות, אלא רוצה שכל תעופה שהיא, תטופל ע"י אותו בלוק Catch, איך אני עושה זאת ? 3. השורה הזו אמנם "תרשום" את הסקריפט שמקפיץ alert, ותתן לו את השם myscript, אבל איך אני מפעיל אותו מתי שאני רוצה ? (הבנתי שזה בלתי אפשרי...)
 

gilad g

New member
תשובות:

1. יש כל מיני סוגים של Exceptions, שכולם יורשים ממחלקת האב (ששמה Exception, כמה מפתיע
). בכל אופן, זה ייראה כך:
try { //bla bla bla } catch (OleDbException ex) // this is for a DB Exception { //Handle the error. User ex.ToString() to get the exact erro message. } catch (IOException ex) { //A handler for IO Exceptions... } catch (Exception ex) { //This is for any other exception... }​
2. כך:
try { //bla } catch { //bla }​
3. ניסית את זה בכלל? אם היית מנסה את זה, לא היית שואל.
 

דונג

New member
ממממ../images/Emo35.gif

1. כן, קראתי על זה ב MSDN, אבל השאלה שלי היא שמשהו ספציפי יותר, נניח לי לי כמה שורות קוד, פתיחת חיבור ל DB, ביצוע INSERT וסגירת החיבור, זה לא ממש יעיל לכתוב כל פקודה בנפרד בתוך try ו catch, אלא לכתוב ת כל הפקודות ברצף בתוך try. אבל אך אני אוכל לדעת אם פתיחת החיבור נכשלה, ה INSERT או הסגירה ? 2. מה ההבדל בין :
catch (Exception ex)​
לבין catch בלי כלום בסוגריים ? שניהם יתפסו כל שגיאה שהיא, לא ? 3. בהחלט ניסיתי, מה שלא מצאתי הוא איך להפעיל את הסקריפט, בזרת השם שלו (myscript), בצורה יזומה...
 

gilad g

New member
תשובות ../images/Emo26.gif

1. תצטרך לקנן את הבלוקים:
OleDbConnection conn = new OleDbConnection(...); try { conn.open(); try { OleDbCommand cmd; //bla bla bla cmd.ExecuteNonQuery(); } catch (OleDbException ex) { //INSERT error } } catch (OleDbException ex) { //error connecting }​
2. צודק, אין הבדל, לי פשוט יותר נוח לכתוב רק catch
3. לא הבנת משהו - RCSB לא "רושם" את הסקריפט. הוא שולח אותו כפלט ללקוח. כשהלקוח (כלומר, הדפדפן) רואה את הסקריפט של ה-alert, הוא יציג את ה-alert, ונגמר הסיפור.
 

דונג

New member
תגובות :)

1. חשבתי על זה, זו לא צורת כתיבה נוחה לקריאה :) חשבתי שיש משהו כמו שיש ב SQL : NO_DATA_FOUND, TOO_MANY_ROWS וכו'. אבל OK, יש מבין :) 2. OK :) 3. כנראה שבאמת לא הבנתי :) אתה אומר בעם ש - RCSB שולח את זה כפלט לקוח, אני מניח שהוא פשוט מוסיף את הסקריפט לקובץ ה HTML שנשלח ללקוח... כלומר, אם בתוך ה Button_Click (ארוע צד שרת), אני אקרא ל - RCSB , אז הסקריפט יופעל באותו רגע שקראתי לוף והלקוח יקבל את ההודעה בדיוק כשרציתי שיקבל ? (אני שואל מכיוון שניסיתי וזה לא עבד. האם בתאוריה אני צודק ?)
 

gilad g

New member
אממ, כן,

אתה צודק. ה-script בעצם נשלח כחלק מה-HTML שנשלח ללקוח. יכול להיות שבגללה אתה לא רואה את ההודעה היא שגיאת צד לקוח (אולי כתבת את הסקריפט לא נכון?
)
 

gilad g

New member
תיקון

יכול להיות שבגללה = יכול להיות שהסיבה שבגללה.
 

דונג

New member
עובדד ! אבל בעיה בעייתית :../images/Emo8.gif../images/Emo8.gif../images/Emo8.gif

קודם כל, זה עובד, תודה רבה

string myScript = "<script language='javascript'>alert('שלום');</script>"; RegisterClientScriptBlock("myscript",myScript);​
הבעיה היא, שמה שקורה הוא שכאשר ההודעה מופיעה על המסך, אך הקונטרולים שיש על המסך נעלמים, ורק לאחר שאני לוחץ "אישור" על חלון ההודעה, הכל חוזר למסך.... יש סיבה לכך ?
 

gilad g

New member
כן,

זה בגלל שהסקריפט מתבצע עוד לפני שהדף נטען אצל הלקוח... שנה את זה ל:
string myScript = "<script language='javascript'> onload = function() { alert('שלום'); }</script>";​
זה אמור לעבוד
 

gilad g

New member
../images/Emo18.gif שרשר שאלותיך ../images/Emo46.gif

זאת לא פעם ראשונה, אני לא אבקש יותר.
 
למעלה