בעיה מטרידה ב #C

ד ו ב י ר

New member
בעיה מטרידה ב #C

ב"ה שלום כתבתי את קטע הקוד הבא:
<script runat="server"> OleDbConnection objConnection = new OleDbConnection(ConnectionString) void Page_Load(Object sender, EventArgs e) { OleDbTransaction objTransaction; OleDbCommand objCommand = new OleDbCommand(strQuery1, objConnection); try { objConnection.Open(); objTransaction = objConnection.BeginTransaction(); objCommand.Transaction = objTransaction; objCommand.ExecuteNonQuery(); objCommand.CommandText = strQuery2; objCommand.ExecuteNonQuery(); objTransaction.Commit(); Label1.Text = "Both operations performed successfully"; } catch (Exception ex) { objTransaction.Rollback(); Label1.Text = ex.Message + "<p>Both operations failed"; } } </script>​
הבעיה כאן ב #C היא שלא ניתן לגשת לאובייקט שלא בטוח שהוא אותחל. במקרה שלנו האובייקט הוא objTransaction. יוצא כך: מצד אחד, אני חייב לאתחל את ה objTransaction בתוך בלוק ה try, ומצד שני אני לא יכול לבצע Rollback בתוך בלוק ה Catch, מכיון שלא בטוח ש objTransaction אותחל. הבעיה הזו לא קוראת רק כאן. לפעמים מבצעים סידרה של פעולות, ואם זה יש תקלה, רוצים לנקות הכל בתוך בלוק ה finally, ואי אפשר לבצע את זה, כי דברים אותחלו בתוך בלוק ה try. איך אפשר להתגבר על בעיה זו? תודה רבה מראש
 

gilad g

New member
if פשוט ../images/Emo13.gif

if (objTransaction != null) objTransaction.Rollback();​
 
לא יעזור

זה עדיין יפול בקומפילציה, כי הקומפיילר עדיין לא בטוח ב - 100% שהמשתנה אכן אותחל. הפתרון: לאתחל את המשתנה בשורת ההגדרה, אפילו ל - null.
 

ד ו ב י ר

New member
שאלה חדשה

ב"ה שלום יש ב vb קבועים, לדוגמא: vbCrLf בשביל לרדת שורה, ועוד כמה קבועים כאלו. איך אפשר לעשות את הפעולה הזו ב #C? (ניסיתי להוסיף ל string את "n\" אבל זה לא עזר). האם יש קבועים דומים ב #C? תודה מראש
 

michallev

New member
מנסיוני כן n\ עובד, אבל..

אתה יכול להשתמש ב System.Environment.NewLine אם תצרף קוד C# אפשר יההי לעזור יותר.
 

sirpinky

New member
מי אמר שאין? יש.

System.Environment.NewLine וגם מתוך ה- output שלך, אם אתה כותב ASP.NET
 
למעלה