2012-04-04 6 views
8

मेरे पास SQL ​​सर्वर सीई 4 के साथ LINQ-to-SQL का उपयोग कर एक एप्लिकेशन है। मुझे पता है कि यह आधिकारिक रूप से समर्थित नहीं है, लेकिन हमने इसे काम किया है निम्नलिखित अपवाद। अवसर पर, हमें इसे अद्यतन करने का प्रयास करते समय डेटाबेस में एक पंक्ति के साथ एक त्रुटि मिलती है।SQL सर्वर सीई 4 के साथ DivideByZeroException बड़ी संख्या में पंक्तियों को हटाते समय

हम डेटाबेस से एक पंक्ति का चयन करने के लिए DataContext का उपयोग करते हैं, कुछ कॉलम (एक बूलियन और बाइट कॉलम) अपडेट करते हैं, फिर हम SubmitChanges() पर कॉल करते हैं। जब हम परिवर्तन जमा करते हैं, तो हमें निम्नलिखित स्टैक ट्रेस के साथ एक DivideByZeroException मिल रहा है:

सिस्टम। डिवाइडबेजरोएक्सप्शन: शून्य से विभाजित करने का प्रयास किया गया।
System.Data.SqlServerCe.NativeMethodsHelper.CompileQueryPlan पर (IntPtr pQpCommand, स्ट्रिंग pwszCommandText, ResultSetOptions विकल्प, IntPtr [] pParamNames, IntPtr prgBinding, Int32 cDbBinding, IntPtr & pQpPlan, IntPtr pError) System.Data पर
। SqlServerCe.NativeMethods.CompileQueryPlan (IntPtr pQpCommand, स्ट्रिंग pwszCommandText, ResultSetOptions विकल्प, IntPtr [] pParamNames, IntPtr prgBinding, Int32 cDbBinding, IntPtr & pQpPlan, IntPtr pError) System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan पर
()
System.Data.SqlServerCe.SqlC पर eCommand.ExecuteCommand (CommandBehavior व्यवहार, स्ट्रिंग विधि, ResultSetOptions विकल्प) System.Data.SqlServerCe.SqlCeCommand.ExecuteNonQuery()
System.Data.Linq.SqlClient.SqlProvider.Execute पर (अभिव्यक्ति क्वेरी, QueryInfo queryInfo, IObjectReaderFactory पर
कारखाने, वस्तु [] parentArgs,, वस्तु [] userArgs, ICompiledSubQuery [] सबक्वेरी (System.Data.Linq.SqlClient.SqlProvider.ExecuteAll पर LASTRESULT कुल वस्तु)
अभिव्यक्ति क्वेरी, QueryInfo [] queryInfos, IObjectReaderFactory कारखाने, वस्तु [ ] उपयोगकर्ता आर्ट्यूमेंट्स, आईसीओएमपील्ड सब्सक्राइक्चर [] सबक्विरीज़)
सिस्टम.डाटा.लिंक। एसक्लक्लिएंट। एससीएलप्रोवाइडर.सिस्टम.डाटा.लिंक.प्रोवाइडर.प्रोवाइडर.एक्सक्यूट (एक्स अभिव्यक्ति क्वेरी)
System.Data.Linq.ChangeDirector.StandardChangeDirector.DynamicUpdate (TrackedObject आइटम) पर
System.Data.Linq.ChangeDirector.StandardChangeDirector.Update (TrackedObject आइटम)
System.Data.Linq पर पर .ChangeProcessor.SubmitChanges (ConflictMode failureMode)
System.Data.Linq.DataContext.SubmitChanges (ConflictMode failureMode)
System.Data.Linq.DataContext.SubmitChanges() पर

संपादित करें पर:

रूपरेखा पर, समस्या, एक हटाने बयान पर उत्पन्न किया जा करने के लिए इस के समान दिखाई देता है:

[WorkItemUid] से DELETE कहां ([OID] = 24151/* @ p0 /) और ([WorkItemOid] = 745/ @ p1 /) और ([SeriesInstanceUid] = '1.3.12.2.1107.5.1.4.54023.30000004101914490887500000063'/ @ p2 /) और ([SopInstanceUid] = '1.3.12.2। 1107.5.1.4.54023।30000004101913521221800001089 '/ @ p3 /) और ([पूर्ण] = 1) और ([FailureCount] = 0/ @ p4 * /) और ([फ़ाइल] है शून्य) और (नहीं ([विफल] = 1))

त्रुटि एक बयान में हो रही थी जहां मैं अलग-अलग ~ 1500 विदेशी कुंजी रिकॉर्ड को हटाने का प्रयास कर रहा था। जब मैंने अलग-अलग पंक्तियों को हटाने के लिए कोड बदल दिया, तो मैंने इसे लगभग 45 पंक्तियों तक सीमित कर दिया जो हटाया नहीं जा सका। मैंने फिर लाइनों पर डिलीट निष्पादित करने का प्रयास करने के लिए एसक्यूएल कॉम्पैक्ट क्वेरी विश्लेषक का उपयोग किया, और यह शून्य अपवाद से विभाजित होने के साथ भी असफल रहा।

तो, यह एक लिंक-टू-एसक्यूएल त्रुटि नहीं प्रतीत होता है, बल्कि एसक्यूएल सर्वर कॉम्पैक्ट सीई 4.0 के साथ कुछ भी इन पंक्तियों को हटा रहा है। मैंने एक साफ डेटाबेस को हटाने और शुरू करने का प्रयास किया है, और पॉप्युलेटिंग को दोहराया है और फिर डेटाबेस से हटा रहा है, और समस्या फिर से होती है। यह एक मुद्दा हो सकता है जब 1500 विदेशी कुंजी रिकॉर्ड होते हैं जो हटाते समय कुछ होता है।

Google खोजों का एक गुच्छा अधिकतर खाली था, लेकिन मुझे DivideByZeroException के संदर्भ में SQL Server CE 3.5 के साथ this संदर्भ पर संदर्भ मिला। मैंने पुष्टि की है कि मैं SQL सर्वर सीई 4.0 असेंबली का उपयोग कर रहा हूं, इसलिए यह समस्या प्रतीत नहीं होती है। अगर उपर्युक्त बग अभी भी SQL सर्वर सीई 4.0 पर लागू होता है तो कोई विचार? यह आगे की समीक्षा के बाद प्रकट होता है यह एक ही समस्या है।

+0

आप LINQ से SQL के साथ 4.0 कैसे काम करते हैं ?? – ErikEJ

+3

हम 3.5 डेटाबेस में हमारी स्कीमा बनाते हैं, डीबीएमएल फ़ाइल जेनरेट करते हैं, फिर एक ही सटीक स्कीमा के साथ 4.0 डेटाबेस के खिलाफ चलाते हैं। ऐसा लगता है कि अधिकांश भाग के लिए काम करते हैं। हम डेटाबेस के खिलाफ एक बहु-थ्रेडेड ऐप चला रहे हैं जो अद्यतनों और आवेषणों का एक उचित माउंट करता है। 3.5 के साथ अस्थिरता के मुद्दे थे, जो 4.0 के साथ बेहतर हैं, लेकिन मेरे पास यह एक अपवाद है जो एक विशिष्ट अद्यतन के साथ दोहराने योग्य है। ऐसा लगता है कि डेटा विशिष्ट है। –

+0

क्या आपने डेटाबेस के खिलाफ सीधे SQL कथन निष्पादित करने का प्रयास किया है? क्या आपने 4.0 एसपी 1 सीटीपी की कोशिश की है? – ErikEJ

उत्तर

3

SQL Server Compact CTP1 में अपग्रेड करने से समस्या हल हो गई है। सवाल में रिपोर्ट के अनुसार पंक्तियों को हटाते समय मैं अब अपवाद नहीं देख रहा हूं। समस्या एक तालिका से पंक्तियों को हटाने से संबंधित थी, जहां एक विदेशी कुंजी रिश्ते में 1500 पंक्तियां थीं।

संबंधित मुद्दे