Nullable<Decimal> throws an exception instead of inserting null into Sql Server Money columns ---------------------------------------------------------------------------------------------
Key: IBATISNET-197 URL: http://issues.apache.org/jira/browse/IBATISNET-197 Project: iBatis for .NET Issue Type: Bug Components: DataMapper Environment: Sql Server 2000 Reporter: Bob Hanson Currently using the HEAD revision. When trying to map a null value from a property declared as Nullable<Decimal>, iBatis is throwing the exception shown below. >From stepping into the code, it appears to me that the problem relates to how >null parameters are created. They seem to keep most of their default values. >The System.Data.SqlClient.SqlParameter contains the following: DbType = String SqlDbType = NVarChar SqlValue = Null (but type is System.Data.SqlTypes.SqlString) Value = object (System.DBNull) This works fine for Integers, DateTime, Floats, etc. (and even Decimal) because they can be implicity converted from NVarChar as shown in the chart at http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ca-co_2f3o.asp But converting from NVarChar to Money (which according to the iBatis documentation is mapped from the .Net Decimal type) throws an exception. I assume this is because (as the chart referenced above shows) it requires an Explicit conversion. Is it possible for iBatis to retrieve and set the proper type information even when the value is null? System.Data.SqlClient.SqlException was unhandled Message="Implicit conversion from data type nvarchar to money is not allowed. Use the CONVERT function to run this query." Source=".Net SqlClient Data Provider" ErrorCode=-2146232060 Class=16 LineNumber=0 Number=257 Procedure="rec_Insert_Recording_Package" Server="PMNSQL01\\CIT_USR_SQL" State=2 StackTrace: at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlDataReader.ConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) at System.Data.SqlClient.SqlCommand.ExecuteScalar() at IBatisNet.DataMapper.Commands.DbCommandDecorator.System.Data.IDbCommand.ExecuteScalar() in C:\ibatis\trunk\cs\mapper\IBatisNet.DataMapper\Commands\DbCommandDecorator.cs:line 164 at IBatisNet.DataMapper.MappedStatements.MappedStatement.ExecuteInsert(ISqlMapSession session, Object parameterObject) in C:\ibatis\trunk\cs\mapper\IBatisNet.DataMapper\MappedStatements\MappedStatement.cs:line 895 at IBatisNet.DataMapper.SqlMapper.Insert(String statementName, Object parameterObject) in C:\ibatis\trunk\cs\mapper\IBatisNet.DataMapper\SqlMapper.cs:line 1318 -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira