שאלה עקרונית ב COM עם MTS
אני מעוניין לבצע הרבה שאילתות insert למסד הנתונים בבת אחת, ולעטוף הכל בטרנזקציה. סביבת הפיתוח שלי היא VB6, אבל השאלה תקפה גם ל VCPP6, למיטב הבנתי. לצורך העניין, נניח שאני רוצה להוסיף 1000 לקוחות חדשים בבת אחת. לשם כך עלי להשתמש באובייקט CCustomer . לפי מה שקראתי במאמרים על MTS ו COM או +COM, אני צריך ליצור בכל פעם instance של האובייקט CCustomer ולקרוא למתודה Insert, שנראית בערך כך:
אני מעוניין לבצע הרבה שאילתות insert למסד הנתונים בבת אחת, ולעטוף הכל בטרנזקציה. סביבת הפיתוח שלי היא VB6, אבל השאלה תקפה גם ל VCPP6, למיטב הבנתי. לצורך העניין, נניח שאני רוצה להוסיף 1000 לקוחות חדשים בבת אחת. לשם כך עלי להשתמש באובייקט CCustomer . לפי מה שקראתי במאמרים על MTS ו COM או +COM, אני צריך ליצור בכל פעם instance של האובייקט CCustomer ולקרוא למתודה Insert, שנראית בערך כך:
Public Sub Insert(ByVal lCustId As Long, ByVal sFirstName As String, ByVal sLastName As String) Dim conTemp As ADODB.Connection On Error GoTo EH Set conTemp = New ADODB.Connection With conTemp .ConnectionString = "..." .Open .Execute "INSERT INTO CUSTOMERS ..." .Close End With Set conTemp = Nothing GetObjectContext.SetComplete Exit Sub EH: GetObjectContext.SetAbort If Not conTemp Is Nothing Then If conTemp.State <> adStateClosed Then conTemp.Close End If Set conTemp = Nothing End If Err.Raise ... End Sub
ומה השאלה? בצורה הזו, אם אני מוסיף 1000 לקוחות, אז אני 1000 פעמים פותח וסוגר connection ל DB , כאשר במקום זאת הייתי יכול לפתוח רק connection אחד, ולהריץ לולאה של פקודות insert . אז מה נכון או מה עדיף? אני עדיין מעוניין לעבוד עם MTS (או +COM ), אבל אני לא רוצה שהשרת "יסבול" יותר מדי. אני יודע שהשרת עושה connection pooling, אבל זה נראה לי עדיין מיותר במקרה שכזה. אגב, אני מכיר את השיטה של יצירת טרנזקציה ע"י המתודות BeginTrans וכו' של ה connection, אבל זה לא ממש MTS . אז מה דעתכם? האם זוהי השיטה היחידה? איך אתם עובדים עם MTS כאשר אתם מעוניינים "לשפוך" פנימה הרבה נתונים בבת אחת? תודה מראש לכל העונים והעוזרים, רון