2012-06-19 12 views
26

मैं एक संग्रहीत प्रक्रिया कोई डिफ़ॉल्ट मान के साथ एक पैरामीटर है कि राशि के साथ एक अशक्त पैरामीटर पारित करने के लिए है, लेकिन यह शून्य हो सकता है। लेकिन मैं यह नहीं समझ सकता कि डैपर के साथ कैसे गुजरना है। मैं इसे एडीओ में ठीक कर सकता हूं।कैसे डैप्पर

connection.Execute("spLMS_UpdateLMSLCarrier", new { **RouteId = DBNull.Value**, CarrierId = carrierID, UserId = userID, TotalRouteRateCarrierId = totalRouteRateCarrierId }, 
             commandType: CommandType.StoredProcedure); 

अपवाद:

System.NotSupportedException was caught 
    Message=The member RouteId of type System.DBNull cannot be used as a parameter value 
    Source=Dapper 
    StackTrace: 
     at Dapper.SqlMapper.LookupDbType(Type type, String name) in C:\Dev\dapper-git\Dapper\SqlMapper.cs:line 348 
     at Dapper.SqlMapper.CreateParamInfoGenerator(Identity identity) in C:\Dev\dapper-git\Dapper\SqlMapper.cs:line 1251 
     at Dapper.SqlMapper.GetCacheInfo(Identity identity) in C:\Dev\dapper-git\Dapper\SqlMapper.cs:line 908 
     at Dapper.SqlMapper.Execute(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Nullable`1 commandTimeout, Nullable`1 commandType) in C:\Dev\dapper-git\Dapper\SqlMapper.cs:line 532 
     at Rating.Domain.Services.OrderRatingQueueService.UpdateLMSLCarrier(Int32 totalRouteRateCarrierId, Int32 carrierID, Int32 userID) in C:\DevProjects\Component\Main\Source\Rating\Source\Rating.Domain\Services\OrderRatingQueueService.cs:line 52 
     at Benchmarking.Program.OrderRatingQueue() in C:\DevProjects\Component\Main\Source\Benchmarking\Source\Benchmarking\Program.cs:line 81 
     at Benchmarking.Program.Main(String[] args) in C:\DevProjects\Component\Main\Source\Benchmarking\Source\Benchmarking\Program.cs:line 28 
    InnerException: 

RouteId बंद छोड़ा नहीं जा सकता, मुझे एक त्रुटि का कहना है कि यह आवश्यक है देता है। नियमित नल का उपयोग नहीं कर सकता है या तो मुझे एक और त्रुटि देता है। संग्रहीत प्रक्रिया को बदल नहीं सकते हैं, यह मेरे नहीं है।

+0

RouteId किस प्रकार है? – driis

+0

यह एक पूर्णांक है। और इससे पहले कि आप कुछ भी कहते हैं, याद है, मैं कोई अपवाद नहीं है यह सिर्फ ADO में ठीक कर सकते हैं। –

उत्तर

47

मुझे लगता है कि आप एप्राइपिएट प्रकार में null कास्टिंग करके ऐसा करने में सक्षम होना चाहिए। मान लेते हैं RouteId एक पूर्णांक है करते हैं:

connection.Execute("spLMS_UpdateLMSLCarrier", new { RouteId = (int?)null, CarrierId = carrierID, UserId = userID, TotalRouteRateCarrierId = totalRouteRateCarrierId }, commandType: CommandType.StoredProcedure); 

समस्या है जब नियमित रूप से अशक्त का उपयोग कर आप का सामना कर रहे संभावना है कि संकलक गुमनाम प्रकार में RouteId के प्रकार के अनुमान नहीं लगा सकता जब सिर्फ कलाकारों के बिना null का उपयोग कर रहा है।

+0

एकदम सही है। आपको बहुत - बहुत धन्यवाद! यह जगह msdn –

+0

ग्रेट से बेहतर है, अगर उसने आपकी मदद की है तो जवाब स्वीकार/अपवर्तित करना याद रखें :-) – driis

+0

मुझे स्वीकार करने से पहले 10 मिनट का इंतजार करना पड़ा और मैं वोट करने के लिए बहुत नया हूं। ऐसा लगता है कि आपको केवल नए होने पर वोट नहीं देनी चाहिए। मूर्खतापूर्ण –

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