I would expect a database column of type SmallDateTime to be mapped to
a DateTime object...not a string. Why not keep it as a DateTime and let
your application decide its string representation?
--- Zarar Siddiqi <[EMAIL PROTECTED]> wrote:
>
> Ok, for now I've fixed this problem by defining a custom type handler
> since IBatis is expecting a CLR type of DateTime (code below). But
> somebody please tell me there is a better way of doing this. Isn't
> IBatis smart enough to know that the date is being casted to a string
> and behave accordingly?
>
> public class SmallDateTimeTypeHandler : ITypeHandlerCallback
> {
> public SmallDateTimeTypeHandler() {}
> public object ValueOf(string nullValue) {
> return nullValue;
> }
>
> public object GetResult(IResultGetter getter) {
> if (getter != null) {
> DateTime dt = (DateTime) getter.Value;
> return dt.ToString();
> } else {
> return null;
> }
> }
>
> public void SetParameter(IParameterSetter setter, object
> parameter)
> {
> string val = (string) parameter;
> setter.Value = val;
> }
> }
>
>
>
> > -------Original Message-------
> > From: Zarar Siddiqi <[EMAIL PROTECTED]>
> > Subject: smalldatetime to string conversion problem in sql server
> > Sent: 13 Mar '06 15:53
> >
> > Hi,
> >
> > I'm having problem reading a column which stores a date as
> smalldatetime in SQL Server.��I can write to the column fine
using a
> string property but when I try to read it, I get the error pasted
> below.����I've already tried to specify the types explicitly
but that
> didn't work:
> >
> > <result column="ShipDate" property="ShipDate" type="string"
> dbType="SmallDateTime"/>
> >
> > The reason I know it's this column that's the problem is because
> as soon as I take it out, everything starts to work again.
> >
> > Any help is apprecited.��
> >
> > Here's the error I get:
> >
> > System.InvalidCastException: Specified cast is not valid.
> >
> > With the trace:
> > [InvalidCastException: Specified cast is not valid.]
> > �� System.Data.SqlClient.SqlDataReader.GetSqlString(Int32 i)
+46
> > �� System.Data.SqlClient.SqlDataReader.GetString(Int32 i) +32
> > ��
>
IBatisNet.DataMapper.TypeHandlers.StringTypeHandler.GetValueByName(ResultProperty
> mapping, IDataReader dataReader) +79
> > ��
>
IBatisNet.DataMapper.Configuration.ResultMapping.ResultProperty.GetDataBaseValue(IDataReader
> dataReader) +32
> > ��
>
IBatisNet.DataMapper.MappedStatements.MappedStatement.SetObjectProperty(RequestScope
> request, ResultMap resultMap, ResultProperty mapping, Object& target,
> IDataReader reader) +235
> > ��
>
IBatisNet.DataMapper.MappedStatements.MappedStatement.ApplyResultMap(RequestScope
> request, IDataReader reader, Object resultObject) +241
> > ��
>
IBatisNet.DataMapper.MappedStatements.MappedStatement.RunQueryForObject(RequestScope
> request, IDalSession session, Object parameterObject, Object
> resultObject) +133
> > ��
>
IBatisNet.DataMapper.MappedStatements.MappedStatement.ExecuteQueryForObject(IDalSession
> session, Object parameterObject, Object resultObject) +92
> > ��
>
IBatisNet.DataMapper.MappedStatements.MappedStatement.ExecuteQueryForObject(IDalSession
> session, Object parameterObject) +10
> > �� IBatisNet.DataMapper.SqlMapper.QueryForObject(String
> statementName, Object parameterObject) +147
> >
> >
> >
>