.NET
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic to the Top
- Bookmark
- Subscribe
- Printer Friendly Page
Database parameter in batch process - by ref?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
I have a master batch process which comprises several steps each of which will change the database. I am gettting the database once, then pass it thought the subsequent steps. Simple example in pseudo code:
void BatchAll(){
database db = new database
BindXref(db)
PurgeAll(db)
DoSomethingElse(db)
save dwg
}finish BatchAll
Should the database db be passed by reference (ref db)?
Thanks Dale
Solved! Go to Solution.
Re: Database parameter in batch process - by ref?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Probably the first thing you might want to do is research the difference between 'reference types' and 'value types' in .NET. A database is a reference type, which means that it is implicitly passed 'byref' regardless of whether you use 'byref' or 'byval', so in fact, there is no point to using 'byref' with any reference type parameter.
Re: Database parameter in batch process - by ref?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Thanks, very helpful. Regards, Dale
Re: Database parameter in batch process - by ref?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
So given the following senario:
DoAllThisStuff()
{
DoThis1()
DoThis2()
DoThis3()
DoThis4()
}
Should DoAllThisStuff() pass db as a parameter to each function, or should each one set db to Active Doc separately?
Database db = MdiActiveDocument.Database;
Best practice?
Re: Database parameter in batch process - by ref?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
A best practice is to avoid any referencing of the 'active' document's database or assumption that your code is operating on the active document's database.
Pass a database or any database-resident object (or ObjectId) in the database to your functions, because that allows them to be used in more situations (like for example, databases that are not open in the AutoCAD editor).
You can pass database-resident objects and ObjectIds as well, when appropriate, since the containing database is easily accessed from their Database property.
Another best practice is to avoid starting or comitting transactions in called APIs. That is best done at the highest level (like for example, within a handler for a custom command).

