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