मैं हो रही है टाइप करने में असमर्थ एक छिटपुट System.Int32 .SingleorDefault पर System.String 'अपवाद' टाइप करने के लिए '' प्रकार की वस्तु कास्ट करने में असमर्थ '() नीचे दिए गए कोड में। यह 9/10 बार काम करता है लेकिन यादृच्छिक रूप से यह एक अपवाद फेंकता है। मैंने यह सुनिश्चित किया है कि सेटिंग आईडी जिसे मैं पास कर रहा हूं उसके पास कोई शून्य मान नहीं है और तालिका में डेटा हमेशा सेटिंग आईडी के लिए मौजूद है, और मैं हमेशा सेटिंगिंग को पूर्णांक के रूप में पास कर रहा हूं।प्रकार 'System.Int32' की वस्तु कास्ट करने के लिए 'System.String'
कोई भी विचार इस कोड के साथ क्या गलत है।
System.InvalidCastException:: प्रकार 'System.Int32' की वस्तु कास्ट करने के लिए 'System.String' टाइप करने में असमर्थ
यहाँ अपवाद जानकारी है।
System.Data.SqlClient.SqlBuffer.get_String पर()
Read_CPT_Setting (ObjectMaterializer`1)
System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext पर()
System.Linq पर पर। Enumerable.SingleOrDefault [TSource] (IEnumerable`1 स्रोत)
System.Linq.Queryable.SingleOrDefault [TSource] (IQueryable`1 स्रोत) पर
CPT.Service.SettingLinqProvider.GetSettingFromDBById पर (Int32 SettingId)
कोड:
Public Function GetSettingFromDBById(ByVal SettingId As Integer) As ReturnObject(Of Model.ISettingBase)
Dim retObj As New ReturnObject(Of Model.ISettingBase)
Dim dbSetting As CPT_Setting
Try
Dim _cptDB As New CPT.Data.CPTLinqRepository.DB(_connString)
Using _cptDB
dbSetting = (From s In context.CPT_Settings _
Where s.SettingId = settingId _
Select s).SingleOrDefault
If dbSetting IsNot Nothing Then
retObj.ReturnValue = Mapping.Setting.MapDBToModel(dbSetting)
End If
End Using
Catch ex As Exception
retObj.ReturnValue = Nothing
retObj.AddErrorMessage("Error returning the site: " & ex.Message)
_log.Error(ex.Message, _userId, ex)
End Try
If retObj.ReturnValue Is Nothing Then
retObj.AddErrorMessage("Site Not Found.")
End If
Return retObj
End Function
मैं प्रत्येक पंक्ति के बाद जगह में कुछ प्रवेश के साथ उपरोक्त कोड को नवीनीकृत किया है।
Public Function GetSettingFromDBById(ByVal SettingId As Integer) As ReturnObject(Of Model.ISettingBase)
Dim retObj As New ReturnObject(Of Model.ISettingBase)
Dim dbSetting As CPT_Setting
Dim SettingsList As New List(Of CPT_Setting)
Dim errStr As String = " ENTER "
Try
Dim _cptDB As New CPT.Data.CPTLinqRepository.DB(_connString)
Using _cptDB
errStr &= " - Inside Context "
If _cptDB Is Nothing Then
errStr &= " - With Context is Nothing "
_log.Error("Unusual Object - Unable to create connection object - Object is NOTHING", _userId)
End If
If System.DBNull.Value.Equals(_cptDB) Then
errStr &= " - With Context is NULL "
_log.Error("Unusual Object - Unable to create connection object - Object is NULL", _userId)
End If
errStr &= " - Querying With SettingID = " & SettingId.ToString()
Dim dbSettingTemp = (From s In context.CPT_Settings _
Where s.SettingId = settingId _
Select s)
If dbSettingTemp Is Nothing Then
errStr &= " -- Nothing is returned from DB - Object is NOTHING -- "
_log.Error(errStr, _userId)
End If
If System.DBNull.Value.Equals(dbSettingTemp) Then
errStr &= " -- Nothing is returned from DB - Object is NULL -- "
_log.Error(errStr, _userId)
End If
errStr &= " -- Before SingleOrDefault -- "
dbSetting = dbSettingTemp.SingleOrDefault
errStr &= " -- After SingleOrDefault -- "
If dbSetting IsNot Nothing Then
If System.DBNull.Value.Equals(dbSetting) Then
errStr &= " - NULL OBJECT RETURNED - Before Mapping "
_log.Error("Unusual Exception - NULL OBJECT RETURNED " & errStr, _userId)
End If
retObj.ReturnValue = Mapping.Setting.MapDBToModel(dbSetting)
errStr &= " - After Mapping With SettingID=" & dbSetting.SettingId.ToString() & " SettingName=" & dbSetting.SettingName.ToString() & " StartDate=" & dbSetting.StartDate.ToShortDateString() & " EndDate=" & dbSetting.EndDate.ToShortDateString()
Else
errStr &= " - DBSetting Is Nothing "
_log.Error("Unusual Object - No Data Retrieved for SettingID=" & SettingId.ToString() & " " & errStr, _userId)
End If
End Using
Catch ex As Exception
retObj.ReturnValue = Nothing
retObj.AddErrorMessage("Error returning the site: " & ex.Message)
_log.Error("Unusual Exception for SettingID=" & SettingId.ToString() & "--" & errStr & "--" & ex.Message, _userId, ex)
End Try
If retObj.ReturnValue Is Nothing Then
retObj.AddErrorMessage("Site Not Found.")
_log.Info("Unusual Object - MRDD Solutions - No Data Retrieved for SettingID=" & SettingId.ToString() & " " & errStr, _userId)
End If
Return retObj
End Function
याद रखें: डीबी सभी settingIDs नीचे दिए गए संदेशों में उल्लेख किया है के लिए सभी पंक्तियों है।
परिणाम:
परिदृश्य 1:
असामान्य वस्तु - कोई डेटा के लिए SettingID = 142,176 ENTER को लिया गया - अंदर प्रसंग - SingleOrDefault से पहले - SettingID = 142,176 के द्वारा क्वेरी - - सिंगलऑर्डफॉल्ट के बाद - - डीबीएससेटिंग कुछ भी नहीं है
असामान्य ऑब्जेक्ट - एमआरडीडी समाधान - सेटिंग आईडी के लिए कोई डेटा पुनर्प्राप्त नहीं किया गया = 142176 एंटर - संदर्भ के अंदर - SettingID के साथ पूछताछ = 142176 - सिंगलऑर्ड से पहले efault - - SingleOrDefault के बाद - - DBSetting कुछ भी नहीं
हैपरिदृश्य 2
के लिए SettingID = 138145-- ENTER असामान्य अपवाद - अंदर प्रसंग - SingleOrDefault से पहले - SettingID = 138,145 के द्वारा क्वेरी - - - सिंगलऑर्डफॉल्ट के बाद - - निर्दिष्ट कास्ट मान्य नहीं है।
असामान्य वस्तु - MRDD समाधान - कोई डेटा = 138,145 ENTER SettingID के लिए पुन: प्राप्त - अंदर प्रसंग - SingleOrDefault से पहले - - SettingID = 138,145 के द्वारा क्वेरी - SingleOrDefault के बाद -
परिदृश्य 3
SettingID के लिए असामान्य अपवाद = 164638-- ENTER - संदर्भ के अंदर - SettingID के साथ पूछताछ = 164638 - सिंगलऑर्डफॉल्ट से पहले - --इंडेक्स सरणी की सीमाओं के बाहर था।
असामान्य वस्तु - MRDD समाधान - कोई डेटा = 164,638 ENTER SettingID के लिए पुन: प्राप्त - अंदर प्रसंग - SettingID = 164,638 के द्वारा क्वेरी - SingleOrDefault से पहले -
आपके डेटाबेस में SettingID कॉलम किस प्रकार का है? –
क्या आपके किसी भी 'CPT_Setting' वर्ग की गुणों और डीबी तालिका के कॉलम के बीच प्रकारों में कोई मेल नहीं है? पसंद: एक कॉलम टेक्स्ट है और संबंधित संपत्ति int है। –
नहीं। डीबी कॉलम और डीबीएमएल/कक्षा गुणों के बीच कोई मेल नहीं है। मैंने सुनिश्चित किया कि यह आंखों के दूसरे सेट के साथ सही है। – ravi