# IDataSource.Add()

Description:

The `Add` method adds a contact or contact group to a contacts database. If the contact or contact group already exists in the database, it is replaced with the new entry. You can thus use this method to both add and edit contacts and contact groups. The information is added to the specified database or, if no database is specified, to the default one. If the default database does not exist, it is created.

This method can be called both synchronously and asynchronously.

Syntax:

For synchronous calls:

    result = so.IDataSource.Add(criteria);

For asynchronous calls:

    result = so.IDataSource.Add(criteria, callback);

Arguments:

- `criteria`:

  This is an object that specifies what contact information to add or edit and for which database. For more information about the object properties and how to define them, see section Criteria for adding and editing contact information.

- `callback`:

  The `callback` argument is the name of the method that is executed when an asynchronous `Add` call has results or status information to return. You must define this method separately. Follow the instructions in section Defining the callback handler for an asynchronous method to define the `callback` method.

  This argument is used only with an asynchronous `Add` call.

Return value:

If synchronous, the `Add` method returns an object that contains an error code and an error message.

If asynchronous, the method returns an object that contains a transaction ID for the `callback` instance, an error code, and an error message. When the asynchronous call has completed, `callback` returns an object that contains an error code and an error message (see Table: Callback return value).

Table: Return value properties for Add
Property | Description | Value
--- | --- | ---
`result.TransactionID` | This is a number used as an identification to match transactions started with an asynchronous `Add` call to one or more calls it generates to `callback`. This property is only valid for asynchronous calls. |
`result.ErrorCode` | This is a number that specifies a predefined error code. | See Service API error codes.
`result.ErrorMessage` | This is a text string that describes the error. | See Contacts Service API error messages.

Remarks:

- The default contacts database is `cntdb://c:contacts.cdb`. The SIM card database is `sim://global_adn`.

- If a contact or contact group is added with its `id` property specified, and the database already contains an entry with that `id`, the existing entry is replaced by the new one. If the `id` is not specified, a new entry is added to the database.

Example code:

For the complete source of a sample widget that demonstrates how to use this Service API, see the full example.