METADATAto Import DLL Constants
One disadvantage of ASP is that when using a component, the component's constants aren't immediately
avaialable. For example, if you want to use the ADO constant
adOpenStatic you need to
While there is nothing wrong with this, wouldn't it be nice not to have to always be sure
each time that you wanted to use an ADO constant?
Your days of including
adovbs.inc are over! The
METADATA tag can be
used to automatically import the constants from a DLL or TBL file. For example, imagine that we wanted
to crate a recordset object with a Keyset cursor. We'd have to use code similar to:
We can use the
METADATA tag in place of the
METADATA tag has the following form:
First off, you need to set
TYPE="typelib". Concerning the other two parameters,
UUID, you need to only specify one. You can either specify the TBL or DLL file directly with
FILE property, or through the
UUID. For example, on my machine, the
following two statements would be identical:
You can then place this
METADATA tag in place of the
#include. For example,
the first script we examined would be changed to:
Now, why would anyone want to use this longer
METADATA tag on each page as opposed to the
#include file="adovbs.inc"? Well, no one probably would want to do that. However,
you can place the
METADATA tag in your
Global.asa file, which will give every
ASP page in your web application knowledge of the ADO constants! Pretty sweet, eh? The
tag should come before the
<SCRIPT ...> block in
Global.asa. (It doesn't have
to be placed there, but why not do that, just to make me happy?)
Anyway, besides saving typing and having to include
adovbs.inc in all of your pages that
need to access ADO constants, using
METADATA supposedly increases performance. At least
according to Microsoft. All I could find regarding the performance boost was one sentence- no benchmarks,
no hard numbers. The sole sentence reads as follows:
"Avoid using server-side #include directives to include large lists of constants. Use the new <METADATA> tag to import type-library constants into global.asa"
-- Taken from ASP Performance Tips
A couple of caveats: first, from alert reader Daniel S., if you include
adovbs.inc when using the
METADATA tag in
Global.asa, you will get a
Name redefined error. Second, the
METADATA tag will only work with IIS 4.0 and up.
|Comments from Alert Reader Rohan P.|
I was just looking at the article Using "METADATA to Import DLL
Constants". There are a couple of points worth bearing in mind.
Firstly, you can import any type libray constants into Global ASA, not just the ADO ones. I also import the FileSystemObject and CDO constants this way.
Secondly, Visual Interedev 6 gives you a neat way of doing it without needing to either know the GUID of the type libray, or referencing the dll directly. Just go to Projects - References. All the type libraries are listed there, and when selected, will automatically get written into Global ASA!
Well, there you have it. Happy Programming!