The ADO.NET provider for OData provides a wide range of features that enable connectivity to OData from .Net applications. The documentation will help you understand the C1.AdoNet.OData namespace, which includes all the available classes that can be used to connect and retrieve data from an OData service.
DataConnectors are mostly used in combination with other ComponentOne components, such as DataEngine and FlexPivot. For a better understanding of this application, please see the OData Sample live demo. The procedure below describes how to use the DataConnector in a console application within Visual Studio.
The ADO.NET provider for OData can be used in any application. In this guide, a console application is created:
To use the ADO.NET provider for OData in an application, the respective NuGet package should be added:
C1ODataConnection implements the ADO.NET DbConnection similar to the standard ADO.NET connection object. Thus retrieving data can be as easy as the following few lines, which print some data from the Northwind data service, by using C1ODataDataAdapter to retrieve a single result set of all the data that matches a query (for other connection options, click here).
C# |
Copy Code |
---|---|
var adapter = new C1.AdoNet.OData.C1ODataDataAdapter( connectionString: "Url = https://services.odata.org/V4/Northwind/Northwind.svc", commandText: "SELECT * FROM Products WHERE UnitPrice > 50"); var table = new System.Data.DataTable(); adapter.Fill(table); Console.WriteLine("Fetched {0} rows.", table.Rows.Count); |
The above code is only for quick script-like usage. Real applications require more structured approaches. However, the high-level steps are similar:
This example expands the above steps into reusable methods within a class.
C# |
Copy Code |
---|---|
using C1.AdoNet.OData; using System.Data; using System.Text; public static class ODataGettingStarted { public static void Run() { // Specify a data source and what data to fetch from there // Prepare a new adapter for the specified source and reuse it to fetch the specified data // Print the fetched data } } ODataGettingStarted.Run(); |
C# |
Copy Code |
---|---|
// Returns a new adapter ready to fetch data served at the passed connection string static C1ODataDataAdapter MakeAdapterForConString(string conString) { var connection = new C1ODataConnection(conString); var command = new C1ODataCommand(connection); return new C1ODataDataAdapter(command); } |
C# |
Copy Code |
---|---|
// Fetches the data for the passed SELECT statement and returns it in a new datatable static DataTable FetchTableForSql(this C1ODataDataAdapter adapter, string sql) { adapter.SelectCommand.CommandText = sql; var table = new DataTable(); adapter.Fill(table); return table; } |
C# |
Copy Code |
---|---|
// Appends to the builder the printing of the passed datatable's rows static StringBuilder AppendRowsOfTable(this StringBuilder builder, DataTable table) { foreach (DataRow row in table.Rows) { builder.AppendJoin(" - ", row.ItemArray).AppendLine(); } return builder.AppendLine(); // Return self for method chaining } |
C# |
Copy Code |
---|---|
// Specify a data source and what data to fetch from there string northwindConString = "Url = https://services.odata.org/V4/Northwind/Northwind.svc"; string quantitiesSql = "SELECT ProductID, ProductName, QuantityPerUnit FROM Products LIMIT 5"; string pricesSql = "SELECT ProductID, ProductName, UnitPrice FROM Products WHERE ProductID < 6"; // Prepare a new adapter for the specified source and reuse it to fetch the specified data using C1ODataDataAdapter adapter = MakeAdapterForConString(northwindConString); using DataTable quantitiesTable = adapter.FetchTableForSql(quantitiesSql); using DataTable pricesTable = adapter.FetchTableForSql(pricesSql); // Print the fetched data var builder = new StringBuilder(); builder.AppendLine() .AppendLine("Printing for quantities:") .AppendRowsOfTable(quantitiesTable) .AppendLine("Printing for prices:") .AppendRowsOfTable(pricesTable) .AppendLine("End of printing."); Console.Write(builder); |
Running the console application should produce an output like this one: