[]
        
(Showing Draft Content)

Querying Data

The ADO.NET Provider for JSON implements two classes you can use to perform CRUD (Create, Read, Update, and Delete)operations: DbDataReader and C1JsonDataAdapter classes. The tabs below describe the interfaces and code implementations.

The provider supports CRUD (Create, Read, Update, Delete) actions for both local JSON files and Web APIs. This functionality is explained in the following sections. It is important to note that when working with Web API JSON streams, configuration files are required for performing CRUD operations. You can either use an existing configuration file or create a new one. For detailed instructions on creating a configuration file, please refer to the Configuration section.

Data Reader

Querying With DbDataReader

The DbDataReader class can be used to fetch data in subset increments as required. It can retrieve data quicker than the C1JsonDataAdapter as it retrieves data in pages. When you read data from the DbDataReader, it requests the succeeding page from the data source to load the result, which makes the data retrieval faster.

The following code examples demonstrate read, create, update, and delete operations from the data source using the DbDataReader.

Create Data

The example adds new records by executing the Insert command.

static void InsertDataReader()
{
    string connectionString = string.Format(@"Data Model={0};Uri='{1}';Json Path='{2}'; api config file = 'api_config.xml'; 
                   Use Pool=true; username='****'; password='*****'", "Relational", "http://45.125.239.138:8088/api/Album", "$.Album");
    using (var con = new C1JsonConnection(connectionString))
    {
        con.Open();
        var sqlInsert = "Insert Into Album([AlbumId], [Title], [ArtistId]) values (9999667,'test', 1)";
        var cmdInsert = con.CreateCommand();
        cmdInsert.CommandText = sqlInsert;
        var result1 = cmdInsert.ExecuteNonQuery();
    }
}

Read Data

The example retrieves data from a JSON file named json_bookstore.json by executing the Select command.

static void ReadDataReader()
{
    static string documentConnectionString = $"Data Model=Document;Uri='json_bookstore.json';Json Path='$.bookstore.books'";
    using (var con = new C1JsonConnection(documentConnectionString))
    {
        con.Open();
        // Create Read command
        var cmd = con.CreateCommand();
        cmd.CommandText = "Select * From books";
        // Execute Read command and display fetched data
        DbDataReader rdr = cmd.ExecuteReader();
        while (rdr.Read())
        {
            Console.WriteLine(String.Format("\t{0} --> \t\t{1}", rdr["title"], rdr["ISBN"]));
        }
        Console.WriteLine("Read operation successful! \n\n");
    } 
}      

Update Data

This example modifies data by executing the Update command.

static void UpdateDataReader()
{
    string connectionString = string.Format(@"Data Model={0};Uri='{1}';Json Path='{2}';api config file = 'api_config.xml';
                   Use Pool=true; username='****'; password='*****'", "Relational", "http://45.125.239.138:8088/api/Album", "$.Album");
    using (var con = new C1JsonConnection(connectionString))
    {
        con.Open();
        var sqlUpdate = "Update Album set [Title] = 'abcde' where [AlbumId] = 9999667";
        var cmdUpdate = con.CreateCommand();
        cmdUpdate.CommandText = sqlUpdate;
        var result2 = cmdUpdate.ExecuteNonQuery();
    }
}      

Delete Data

This example removes data by executing the Delete command.

static void DeleteDataReader()
{
    string connectionString = string.Format(@"Data Model={0};Uri='{1}';Json Path='{2}';api config file = 'api_config.xml';
                   Use Pool=true; username='****'; password='*****'", "Relational", "http://45.125.239.138:8088/api/Album", "$.Invoice");
    using (var con = new C1JsonConnection(connectionString))
    {
        con.Open();
        var sqlDelete = "Delete from Album where [AlbumId] = 9999667";
        var cmdDelete = con.CreateCommand();
        cmdDelete.CommandText = sqlDelete;
        var result3 = cmdDelete.ExecuteNonQuery();
    }
}

Data Adapter

Querying With C1JsonDataAdapter

The C1JsonDataAdapter class can be used to retrieve a single result set containing all the data that matches a given query. The C1JsonDataAdapter uses its Fill method to fetch data from the data source. An empty DataTable instance is passed as an argument to the Fill method. Once the method returns, the DataTable instance is populated with the queried data. Since the Fill method must retrieve all the data from the data source before returning, the C1JsonDataAdapter is slower compared to the DbDataReader.

The following code examples demonstrate create, read, update and delete operations from the data source using C1JsonDataAdapter.

Create Data

The example adds new records by executing the Insert command.

static void InsertDataAdapter() 
{
    string connectionString = string.Format(@ "Data Model={0};Uri='{1}';Json Path='{2}'; api config file = 'api_config.xml'; 
                   Use Pool=true; username='******'; password='*******'", "Relational", "http://45.125.239.138:8088/api/Album", "$.Album");
    
        using(C1JsonConnection conn = new C1JsonConnection(connectionString)) 
        {
        //Populate DataTable
        C1JsonDataAdapter adapter = new C1JsonDataAdapter(conn, "Select * from Album");
        DataTable dataTable = new DataTable();
        adapter.Fill(dataTable);
        //Create Insert command
        adapter.InsertCommand = new C1JsonCommand(conn);
        adapter.InsertCommand.CommandText = "Insert into Album (AlbumId, Title, ArtistId) values (@AlbumId, @Title, @ArtistId)";
        adapter.InsertCommand.Parameters.Add("@AlbumId", "AlbumId");
        adapter.InsertCommand.Parameters.Add("@Title", "Title");
        adapter.InsertCommand.Parameters.Add("@ArtistId", "ArtistId");
        adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.None;
        //Insert new row
        DataRow albumRow = dataTable.NewRow();
        albumRow["AlbumId"] = 9999668;
        albumRow["Title"] = "test";
        albumRow["ArtistId"] = 1;
        dataTable.Rows.Add(albumRow);
        //Update database
        var i = adapter.Update(dataTable);
        if (i != -1) 
        {
            Console.WriteLine("Insert operation successful !!! \n \n");
        }
        //Uncomment to display and verify results
        ShowDataTable(dataTable);
    }
}

Read Data

This example retrieves data by executing the Select command.

public void ReadDataAdapter()
{
    string connectionString = string.Format(@"Data Model={0};Uri='{1}';Json Path='{2}'; api config file = 'api_config.xml'; 
                   Use Pool=true; username='*****'; password='******'", "Relational", "http://45.125.239.138:8088/api/Album", "$.Album");
    using (C1JsonConnection conn = new C1JsonConnection(connectionString))
    {
        //Populate DataTable
        C1JsonDataAdapter adapter = new C1JsonDataAdapter();
        //Create Select command
        adapter.SelectCommand = new C1JsonCommand(conn);
        adapter.SelectCommand.CommandText = "Select * from Album";
        adapter.SelectCommand.UpdatedRowSource = UpdateRowSource.None;
        //Populate Datatable with results using DataAdapter
        DataTable dataTable = new DataTable();
        adapter.Fill(dataTable);
        Console.WriteLine("Select operation successful !!! \n \n");
        //Display results
        ShowDataTable(dataTable);
    }
}

Update Data

This example modifies data by executing the Update command.

static void UpdateDataAdapter() 
{
    string connectionString = string.Format(@ "Data Model={0};Uri='{1}';Json Path='{2}'; api config file = 'api_config.xml'; 
                   Use Pool=true; username='*******'; password='********'", "Relational", "http://45.125.239.138:8088/api/Album", "$.Album");
    
        using(C1JsonConnection conn = new C1JsonConnection(connectionString)) 
        {
        //Populate DataTable
        C1JsonDataAdapter adapter = new C1JsonDataAdapter(conn, "Select * from Album");
        DataTable dataTable = new DataTable();
        adapter.Fill(dataTable);
        //Create Update command
        adapter.UpdateCommand = new C1JsonCommand(conn);
        adapter.UpdateCommand.CommandText = "UPDATE Album SET ArtistId=@ArtistId where AlbumId=@AlbumId";
        adapter.UpdateCommand.Parameters.Add("@ArtistId", "ArtistId");
        adapter.UpdateCommand.Parameters.Add("@AlbumId", "AlbumId");
        adapter.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;
        //Update existing row
        DataRow albumRow = dataTable.Rows[0];
        albumRow["ArtistId"] = 63;
        //Update database
        var i = adapter.Update(dataTable);
        if (i != -1) 
        {
            Console.WriteLine("Update operation successful !!! \n \n");
        }
        //Uncomment to display and verify results
        ShowDataTable(dataTable);
    }
}

Delete Data

This example removes data by executing the Delete command.

static void DeleteDataAdapter() 
{
    string connectionString = string.Format(@ "Data Model={0};Uri='{1}';Json Path='{2}'; api config file = 'api_config.xml'; 
                   Use Pool=true; username='*********'; password='*******'", "Relational", "http://45.125.239.138:8088/api/Album", "$.Album");
    
        using(C1JsonConnection conn = new C1JsonConnection(connectionString)) 
        {
        //Populate DataTable
        C1JsonDataAdapter adapter = new C1JsonDataAdapter(conn, "Select * from Album");
        DataTable dataTable = new DataTable();
        adapter.Fill(dataTable);
        //Create Delete command
        adapter.DeleteCommand = new C1JsonCommand(conn);
        adapter.DeleteCommand.CommandText = "Delete from Album where AlbumId = @AlbumId";
        adapter.DeleteCommand.Parameters.Add("@AlbumId", "AlbumId");
        adapter.DeleteCommand.UpdatedRowSource = UpdateRowSource.None;
        //Delete a row
        DataRow albumRow = dataTable.Rows[dataTable.Rows.Count - 1];
        albumRow.Delete();
        //Update database
        var i = adapter.Update(dataTable);
        if (i != -1) 
        {
            Console.WriteLine("Delete operation successful !!! \n \n");
        }
        //Uncomment to display and verify results
        ShowDataTable(dataTable);
    }
}