简体   繁体   中英

iis7, classic asp; type mismatch error

I've setup a local server on Windows 7 with IIS 7, for a classic ASP VBS site I'm working on.

A page gives me a "type mismatch" error. This doesn't happen with the original server (Windows 2008, IIS 7)

related code:

if myRS("age") = 10 then
  • The field value is an empty string, checked with a debugger, also the error states 'string'
  • The ASP file, database & the data are exact copies of the production site
  • No error resuming in both the public and the local sites.
  • The production server is MS-SQL 2008 R2 web edition, where the local one is Express Edition.

Now I know the code is terribly written. But how can the local server gives such an error and the public server does not? I think comparisons are made through variant type, so subtypes should be automatically evaluated with no errors?

It's most likely caused by an "..intrinsic properties.." issue. My guess is that your production server had already been "fixed" to allow it, and your local server set up has never before experienced the need to "..fix.." this.

You can read more here:

http://blogs.msdn.com/b/distributedservices/archive/2010/04/28/iis-intrinsic-properties-are-disabled-by-default-on-windows-2008-and-windows-2008-r2.aspx

You've used CreateObject to create your recordset/ado objects, and that's affected by this concern which caused Microsoft to disable them as default, out of the box configurations.

Read a bit more here:

http://support.microsoft.com/default.aspx?scid=kb;EN-US;287422

Although.. if you simply want it to work, then you can read the first link.

It could be different data sources or drivers, such that data that looks the same is slightly different.

For example is it an empty string, a blank string or null.

Try rewriting so that you can log the value of myRS("age").

I was not aware of the server configuration you can make to fix this that Nonym mentioned. My suggestion would have been to just update the code to explicitly call the desired property instead of letting it be inferred; eg,

Change this:

if myRS("age") = 10 then

Into this:

if myRS("age").Value = 10 then

This can also have other advantages if I recall correctly, though no specific examples come to mind why at the moment. Best of luck!

Seems like a ADO recordset issue. Try outputting myRS("age") value and if it return nothing or errors out, then try changing the sql driver in connection string or possibly even use CStr(myRS("age")) = CStr(10).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM