> ## Documentation Index
> Fetch the complete documentation index at: https://docs.superoffice.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SuperOffice.WebApi.Agents.IDatabaseTableAgent

# \<a id="SuperOffice\_WebApi\_Agents\_IDatabaseTableAgent">\</a> Interface IDatabaseTableAgent

Namespace: [SuperOffice.WebApi.Agents](SuperOffice.WebApi.Agents.md)\
Assembly: SuperOffice.WebApi.dll

Agent used for CRUD operations on database tables. Read, add, update, delete rows in tables.

```csharp theme={null}
public interface IDatabaseTableAgent : IAgentBase, IDisposable
```

#### Implements

[IAgentBase](SuperOffice.WebApi.Agents.IAgentBase.md),
[IDisposable](https://learn.microsoft.com/dotnet/api/system.idisposable)

## Methods

### \<a id="SuperOffice\_WebApi\_Agents\_IDatabaseTableAgent\_DeleteAsync\_System\_String\_System\_Int32\_\_\_SuperOffice\_WebApi\_RequestOptions\_">\</a> DeleteAsync(string, int\[], RequestOptions)

Delete rows, by primary key; traveltransactionlog and WebHooks are supported

```csharp theme={null}
Task<MassOperationResult> DeleteAsync(string tableName, int[] iDs, RequestOptions requestOptions = null)
```

#### Parameters

`tableName` [string](https://learn.microsoft.com/dotnet/api/system.string)

The name of the table where rows should be deleted

`iDs` [int](https://learn.microsoft.com/dotnet/api/system.int32)\[]

Primary keys of the rows to be deleted

`requestOptions` [RequestOptions](SuperOffice.WebApi.RequestOptions.md)

Override language/culture codes on this request.

#### Returns

[Task](https://learn.microsoft.com/dotnet/api/system.threading.tasks.task-1)\<[MassOperationResult](SuperOffice.WebApi.Data.MassOperationResult.md)\&gt;

Summary of results

### \<a id="SuperOffice\_WebApi\_Agents\_IDatabaseTableAgent\_DeleteRowAsync\_System\_String\_System\_Int32\_SuperOffice\_WebApi\_RequestOptions\_">\</a> DeleteRowAsync(string, int, RequestOptions)

Delete a row from a table

```csharp theme={null}
Task DeleteRowAsync(string tableName, int id, RequestOptions requestOptions = null)
```

#### Parameters

`tableName` [string](https://learn.microsoft.com/dotnet/api/system.string)

The name of the table to delete from; in the current release this must be an 'extratable'. Use the database name, on the form y\_aTable

`id` [int](https://learn.microsoft.com/dotnet/api/system.int32)

The id of the row to delete

`requestOptions` [RequestOptions](SuperOffice.WebApi.RequestOptions.md)

Override language/culture codes on this request.

#### Returns

[Task](https://learn.microsoft.com/dotnet/api/system.threading.tasks.task)

### \<a id="SuperOffice\_WebApi\_Agents\_IDatabaseTableAgent\_InsertAsync\_System\_String\_System\_String\_\_\_System\_String\_\_\_\_\_SuperOffice\_WebApi\_RequestOptions\_">\</a> InsertAsync(string, string\[], string\[]\[], RequestOptions)

Mass-insert rows, with or without primary keys specified. Works on physical tables with no special processing for udef etc.; traveltransactionlog and WebHooks are supported

```csharp theme={null}
Task<MassOperationResult> InsertAsync(string tableName, string[] columns, string[][] data, RequestOptions requestOptions = null)
```

#### Parameters

`tableName` [string](https://learn.microsoft.com/dotnet/api/system.string)

The name of the table where rows should be inserted

`columns` [string](https://learn.microsoft.com/dotnet/api/system.string)\[]

List of column names, in the same order as in the Data parameter

`data` [string](https://learn.microsoft.com/dotnet/api/system.string)\[]\[]

Outer array = rows, inner = columns in specified order; use CultureDataFormatter to format values that aren't string or int

`requestOptions` [RequestOptions](SuperOffice.WebApi.RequestOptions.md)

Override language/culture codes on this request.

#### Returns

[Task](https://learn.microsoft.com/dotnet/api/system.threading.tasks.task-1)\<[MassOperationResult](SuperOffice.WebApi.Data.MassOperationResult.md)\&gt;

Summary of results

### \<a id="SuperOffice\_WebApi\_Agents\_IDatabaseTableAgent\_InsertRowAsync\_System\_String\_SuperOffice\_WebApi\_Data\_StringDictionary\_SuperOffice\_WebApi\_RequestOptions\_">\</a> InsertRowAsync(string, StringDictionary, RequestOptions)

Insert a row into a table

```csharp theme={null}
Task<int> InsertRowAsync(string tableName, StringDictionary values, RequestOptions requestOptions = null)
```

#### Parameters

`tableName` [string](https://learn.microsoft.com/dotnet/api/system.string)

The name of the table to insert into; in the current release this must be an 'extratable'. Use the database name, on the form y\_aTable

`values` [StringDictionary](SuperOffice.WebApi.Data.StringDictionary.md)

A StringDictionary with the values to insert. You do not need to specify all the values in the table. The omitted ones will get default values

`requestOptions` [RequestOptions](SuperOffice.WebApi.RequestOptions.md)

Override language/culture codes on this request.

#### Returns

[Task](https://learn.microsoft.com/dotnet/api/system.threading.tasks.task-1)\<[int](https://learn.microsoft.com/dotnet/api/system.int32)\&gt;

The id of the newly inserted row

### \<a id="SuperOffice\_WebApi\_Agents\_IDatabaseTableAgent\_ReadRowAsync\_System\_String\_System\_Int32\_SuperOffice\_WebApi\_RequestOptions\_">\</a> ReadRowAsync(string, int, RequestOptions)

Read a row from a table

```csharp theme={null}
Task<TableRecord> ReadRowAsync(string tableName, int id, RequestOptions requestOptions = null)
```

#### Parameters

`tableName` [string](https://learn.microsoft.com/dotnet/api/system.string)

The name of the table to fetch; in the current release this must be an 'extratable'. Use the database name, on the form y\_aTable

`id` [int](https://learn.microsoft.com/dotnet/api/system.int32)

The id of the row to fetch

`requestOptions` [RequestOptions](SuperOffice.WebApi.RequestOptions.md)

Override language/culture codes on this request.

#### Returns

[Task](https://learn.microsoft.com/dotnet/api/system.threading.tasks.task-1)\<[TableRecord](SuperOffice.WebApi.Data.TableRecord.md)\&gt;

The row from the table

### \<a id="SuperOffice\_WebApi\_Agents\_IDatabaseTableAgent\_TruncateAsync\_System\_String\_SuperOffice\_WebApi\_RequestOptions\_">\</a> TruncateAsync(string, RequestOptions)

Drop all rows in a table. This clearance is not individually logged in TravelTransactionlog or Webhook/script calls

```csharp theme={null}
Task<MassOperationResult> TruncateAsync(string tableName, RequestOptions requestOptions = null)
```

#### Parameters

`tableName` [string](https://learn.microsoft.com/dotnet/api/system.string)

Name of table to be truncated

`requestOptions` [RequestOptions](SuperOffice.WebApi.RequestOptions.md)

Override language/culture codes on this request.

#### Returns

[Task](https://learn.microsoft.com/dotnet/api/system.threading.tasks.task-1)\<[MassOperationResult](SuperOffice.WebApi.Data.MassOperationResult.md)\&gt;

Summary of results

### \<a id="SuperOffice\_WebApi\_Agents\_IDatabaseTableAgent\_UpdateRowAsync\_System\_String\_System\_Int32\_SuperOffice\_WebApi\_Data\_StringDictionary\_SuperOffice\_WebApi\_RequestOptions\_">\</a> UpdateRowAsync(string, int, StringDictionary, RequestOptions)

Update a row in a table

```csharp theme={null}
Task UpdateRowAsync(string tableName, int id, StringDictionary values, RequestOptions requestOptions = null)
```

#### Parameters

`tableName` [string](https://learn.microsoft.com/dotnet/api/system.string)

The name of the table to update; in the current release this must be an 'extratable'. Use the database name, on the form y\_aTable

`id` [int](https://learn.microsoft.com/dotnet/api/system.int32)

The id of the row to update

`values` [StringDictionary](SuperOffice.WebApi.Data.StringDictionary.md)

A StringDictionary with the values to update. You do not need to specify all the values in the table. The omitted ones will remain unchanged

`requestOptions` [RequestOptions](SuperOffice.WebApi.RequestOptions.md)

Override language/culture codes on this request.

#### Returns

[Task](https://learn.microsoft.com/dotnet/api/system.threading.tasks.task)

### \<a id="SuperOffice\_WebApi\_Agents\_IDatabaseTableAgent\_UpsertAsync\_System\_String\_System\_String\_\_\_System\_String\_\_\_System\_String\_\_\_\_\_SuperOffice\_WebApi\_Data\_UpsertNomatchAction\_System\_Boolean\_SuperOffice\_WebApi\_RequestOptions\_">\</a> UpsertAsync(string, string\[], string\[], string\[]\[], UpsertNomatchAction, bool, RequestOptions)

Insert or update rows, optionally deleting/zeroing 'leftover' rows. Special support for UDEF, as well as optional extensive information return. Traveltransactionlog and WebHooks are supported

```csharp theme={null}
Task<MassOperationResult> UpsertAsync(string tableName, string[] columns, string[] keys, string[][] data, UpsertNomatchAction nomatchAction, bool returnRowStatus, RequestOptions requestOptions = null)
```

#### Parameters

`tableName` [string](https://learn.microsoft.com/dotnet/api/system.string)

The name of the table where rows should be inserted or updated

`columns` [string](https://learn.microsoft.com/dotnet/api/system.string)\[]

List of column names, in the same order as in the data

`keys` [string](https://learn.microsoft.com/dotnet/api/system.string)\[]

List of columns that are to be used as keys, to match any existing rows

`data` [string](https://learn.microsoft.com/dotnet/api/system.string)\[]\[]

Outer array = row, inner = column in specified order; use CultureDataFormatter to format values

`nomatchAction` [UpsertNomatchAction](SuperOffice.WebApi.Data.UpsertNomatchAction.md)

Action to take on rows in the target table, that are not matched by any rows in the incoming data. Use the deletion options with care. NEVER use deletion if your Upsert is so large you need to divide it into multiple batches.

`returnRowStatus` [bool](https://learn.microsoft.com/dotnet/api/system.boolean)

If true, then the 'RowStatus' member of the return carrier will be populated with a per-row status, for each incoming row

`requestOptions` [RequestOptions](SuperOffice.WebApi.RequestOptions.md)

Override language/culture codes on this request.

#### Returns

[Task](https://learn.microsoft.com/dotnet/api/system.threading.tasks.task-1)\<[MassOperationResult](SuperOffice.WebApi.Data.MassOperationResult.md)\&gt;

Summary of results


## Related topics

- [SuperOffice.WebApi.Agents.DatabaseTableAgent](/en/api/reference/webapi/SuperOffice.WebApi.Agents.DatabaseTableAgent.md)
- [SuperOffice.WebApi.Agents](/en/api/reference/webapi/SuperOffice.WebApi.Agents.md)
- [SuperOffice.WebApi.Agents.ICustomObjectAgent](/en/api/reference/webapi/SuperOffice.WebApi.Agents.ICustomObjectAgent.md)
- [SuperOffice.WebApi.Agents.CustomObjectAgent](/en/api/reference/webapi/SuperOffice.WebApi.Agents.CustomObjectAgent.md)
- [SuperOffice.WebApi.Agents.IConfigurationAgent](/en/api/reference/webapi/SuperOffice.WebApi.Agents.IConfigurationAgent.md)
- [SuperOffice.WebApi.Agents.ConfigurationAgent](/en/api/reference/webapi/SuperOffice.WebApi.Agents.ConfigurationAgent.md)
