In the Unit Test, a first draft of mapping for Access exists but have not yet been used for test.
In the test project, only mapping MS Sql Server, Oracle and MySql have been tested.
> Unless I'm mistaken, I don't believe that Access has a CAST() function.
> It has a CONVERT() function, but no CAST().
>
> There are test cases (namely: InsertCategoryViaInsertSatement in
> \Maps\Access\OleDb\Category.xml) for Access that try to use this syntax
> for making sure returns an int:
>
>
> select CAST(@@IDENTITY as int) as value
>
>
> I copied the test case into my code and kept getting this error:
>
> Exception: System.Data.OleDb.OleDbException
> Message: IErrorInfo.GetDescription failed with E_FAIL(0x80004005).
>
> I found that a common cause for this is that I need to add [ ] around
> column names that are reserved words. I thought that was my problem but
> after enclosing all my column names that problem still occured. I also
> tried changing value to [value].
>
> I discovered that there are several test cases in the Access\OleDb
> folder that weren't being called. This was a bit confusing. I was under
> the impression that all the sql maps in the test project .xml files
> were being called. The statements that didn't have test cases written
> didn't have any comments saying that they weren't being called.
>
> I eventually solved my problem by using a simple:
>
> SELECT @@IDENTITY
>
> Is there a better way of doing that? Do I need to call Access'
> CONVERT() function to make sure its an int?
>
> I don't think Access is able to deal with more than one statement. It
> complains about extra character after the semi-colon:
>
> insert into Categories
> (Category_Name, Category_Guid)
> values
> (#Name#, #Guid:Guid#);
> select CAST(SCOPE_IDENTITY() as int) as value
>
> I copied that from the InsertCategory statement.
>
> These gotcha's might seem simple to someone who works with Access a lot
> but for someone who rarely works in Acccess they took a few hours to
> figure out.
>
> - Ron
Accédez au courrier électronique de La Poste : www.laposte.net ;
3615 LAPOSTENET (0,34 /mn) ; tél : 08 92 68 13 50 (0,34/mn)