Database Question awilson  2010-06-17 11:22
Status: Closed
 
Hello,

I have some javascript with embedded sql that when i run the query on a labkey installation running on postgres installation it works fine but on a labkey installation that is under MSSQL i get the error message: Conversion failed when converting the varchar value '%,' to data type int. Any recommendations as to what the difference may be between the two installations that would prevent the script from executing. any information would be great.

firebug gives a console output of the error as:

{
    "exceptionClass": "java.sql.SQLException",
    "exception": "Conversion failed when converting the varchar value '%,' to data type int.",
    "stackTrace": [
        "net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368)",
        "net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2820)",
        "net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2258)",
        "net.sourceforge.jtds.jdbc.TdsCore.isDataInResultSet(TdsCore.java:796)",
        "net.sourceforge.jtds.jdbc.JtdsResultSet.<init>(JtdsResultSet.java:134)",
        "net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:483)",
        "net.sourceforge.jtds.jdbc.JtdsStatement.executeQuery(JtdsStatement.java:1304)",
        "org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)",
        "org.labkey.api.data.StatementWrapper.executeQuery(StatementWrapper.java:839)",
        "org.labkey.api.data.Table._executeQuery(Table.java:104)",
        "org.labkey.api.data.Table.executeQuery(Table.java:280)",
        "org.labkey.api.data.Table.selectForDisplay(Table.java:1385)",
        "org.labkey.api.data.Table.selectForDisplay(Table.java:1363)",
        "org.labkey.api.data.RenderContext.selectForDisplay(RenderContext.java:403)",
        "org.labkey.api.data.RenderContext.getResultSet(RenderContext.java:269)",
        "org.labkey.api.data.DataRegion.getResultSet(DataRegion.java:619)",
        "org.labkey.api.data.DataRegion.getResultSet(DataRegion.java:602)",
        "org.labkey.api.query.QueryView.exportToApiResponse(QueryView.java:1436)",
        "org.labkey.api.action.ApiQueryResponse.<init>(ApiQueryResponse.java:68)",
        "org.labkey.query.controllers.QueryController$ExecuteSqlAction.execute(QueryController.java:1773)",
        "org.labkey.query.controllers.QueryController$ExecuteSqlAction.execute(QueryController.java:1715)",
        "org.labkey.api.action.ApiAction.handlePost(ApiAction.java:154)",
        "org.labkey.api.action.ApiAction.handleRequest(ApiAction.java:93)",
        "org.labkey.api.action.BaseViewAction.handleRequestInternal(BaseViewAction.java:166)",
        "org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)",
        "org.labkey.api.action.SpringActionController.handleRequest(SpringActionController.java:334)",
        "org.labkey.api.module.DefaultModule.dispatch(DefaultModule.java:742)",
        "org.labkey.api.view.ViewServlet.service(ViewServlet.java:150)",
        "javax.servlet.http.HttpServlet.service(HttpServlet.java:729)",
        "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)",
        "org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)",
        "org.labkey.api.data.TransactionFilter.doFilter(TransactionFilter.java:36)",
        "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)",
        "org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)",
        "org.labkey.core.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:118)",
        "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)",
        "org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)",
        "org.labkey.api.module.ModuleLoader.doFilter(ModuleLoader.java:601)",
        "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)",
        "org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)",
        "org.labkey.api.security.AuthFilter.doFilter(AuthFilter.java:101)",
        "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)",
        "org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)",
        "org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)",
        "org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)",
        "org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)",
        "org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)",
        "org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)",
        "org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)",
        "org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)",
        "org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)",
        "org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)",
        "org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)",
        "org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)",
        "java.lang.Thread.run(Unknown Source)"
    ]
}
 
 
Matthew Bellew responded:  2010-06-17 12:13
Type conversion is one area that the databases differ on in various details. Comparing an INT to a VARCHAR for instance,

one server may return an error immediately,
one may convert the int to a string
one may convert the string to and int and a) return false if it doesn't convert b) fail if it doesn't convert

It's a little hard to tell exactly what is happening here, but it helps to be careful to match types before calling the database and not just pass through text the user types.