בעיה מטרידה ב #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. איך אפשר להתגבר על בעיה זו? תודה רבה מראש