سؤال

لدينا مجموعة من التطبيقات VB6 في شركتنا. نحن نحاول تصحيح خطأ SQL مهلة عشوائي ولم تتبع مع SQL Server التعريف على الحدث التدقيق تسجيل الدخول. لاحظنا أن الاتصالات كانت قادمة في nonpooled كما. نحن نستخدم مزود SQLOLEDB مع SQL Server 2000 و 2005. ولقد بحثت في الانترنت وكل ما جئت عبر تقول أن الاتصالات يتم تجميع افتراضيا في موفر SQLOLEDB، لكننا لا نرى ذلك. فيما يلي رمز نستخدمها للاتصال قاعدة البيانات. نحن بحاجة حقا أن يكون هذه الاتصالات المجمعة لأننا نعتقد أن هذا قد يكون مشكلة مع خطأ مهلة عشوائي. يمكن أي واحد تألق بعض الضوء على سبب تجمع الاتصال لا يعمل وبأي شكل من الأشكال والعمل على انجاحه؟ شكرا.

Dim cnn As New ADODB.Connection
cnn.ConnectionString = "Provider=SQLOLEDB;Data Source=xxx;Catalog=xxx;User ID=xxx Password=xxx;"
Call cnn.Open
Dim cmd As New ADODB.Command
Set cmd.ActiveConnection = cnn
cmd.CommandText = "SELECT * FROM [Table]"
Dim rs As New ADODB.RecordSet
Call rs.Open(cmd, , adOpenStatic, adLockOptimistic)
While Not rs.eof
    'Do stuff
    Call rs.MoveNext
Wend
'Close and Dispose connection here
هل كانت مفيدة؟

المحلول

ويمكن التخلص الاتصال على كل مكالمة منع تجميع

<اقتباس فقرة>   

... حالة واحدة على الأقل من اتصال   كائن منشأ لكل فريدة من نوعها   المستخدم في جميع الأوقات. خلاف ذلك، تجمع   وسيتم تدمير عندما الأخيرة   كائن الاتصال لهذه السلسلة هو   مغلقة.

http://msdn.microsoft.com/en-us/library/ ms810829.aspx

نصائح أخرى

وأنا عابث حولها وفتح اتصال عند بدء التشغيل التطبيق والاحتفاظ به فتح من خلال طوال الوقت كان التطبيق قيد التشغيل. تجمع الاتصال لم يبدأ بعد الاتصال الثاني افتتح ومغلقة.

وأنت ذكرت أنك كانوا يحاولون تعقب مشكلة مهلة عشوائية. لقد كان هو نفسه، عموما عندما كنت اقوم به من SELECT التي عادت الكثير من الصفوف. أمرين:

وCnn.CursorLocation = ADODB.adUseServer

و(الخيار الآخر هو adUseClient) - أعتقد أعطاني adUseServer الاستفسارات أسرع، مما قلل من يكيليهود من مهلة. يمكنك القيام بذلك قبل فتح الصدد، على ما أعتقد.

وCnn.CommandTimeout = 0

وأيضا قبل العراء ()، ويقول أن كنت تريد مهلة لانهائية. أعتقد أن المهلة الافتراضية شيء من هذا القبيل 30S، الذي كان الطريق قصيرة جدا لبعض الاستفسارات. سيتم استخدام CommandTimeout للاستعلامات السجلات. إذا كنت تستخدم كائن الأوامر، فقد حان الخاصة عضوا CommandTimeout، التي لا يبدو أن ترث من اتصال (أي أنا وضعت من قبل I تنفيذ أمر).

وآسف إذا كان بناء الجملة ليس صحيحا تماما، وأنا قطع من بعض رمز C ++.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top