DSoft.System.Data.Common.Extensions 5.1.2412.11

dotnet add package DSoft.System.Data.Common.Extensions --version 5.1.2412.11                
NuGet\Install-Package DSoft.System.Data.Common.Extensions -Version 5.1.2412.11                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DSoft.System.Data.Common.Extensions" Version="5.1.2412.11" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add DSoft.System.Data.Common.Extensions --version 5.1.2412.11                
#r "nuget: DSoft.System.Data.Common.Extensions, 5.1.2412.11"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install DSoft.System.Data.Common.Extensions as a Cake Addin
#addin nuget:?package=DSoft.System.Data.Common.Extensions&version=5.1.2412.11

// Install DSoft.System.Data.Common.Extensions as a Cake Tool
#tool nuget:?package=DSoft.System.Data.Common.Extensions&version=5.1.2412.11                

Microsoft.Data.SqlClient.Helpers

Data Access Classes and extensions for System.Data.Common and Microsoft.Data.SqlClient

Features

  • Simplfied API for running Queries and Executing Scripts
  • Helper methods for insterting and updating data without script
  • Connection string management helpers

Usage

DataConnectionStringManager

DataConnectionStringManager provides a centralised location for storing and managing connections strings across projects in a solution.

This solves the issue of the connection string loading mechanisms only being available on the host application.

Loading connection strings

The DataConnectionStringManager.ConnectionStringLoader property allows you to set a function to handle loading of a connection string when requested by shared code, which cannot access the app.config or web.config files.

This code shows a .NET Core console application example

private static IConfigurationRoot _config;

static void Main(string[] args)
{
    var builder = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

    //load the config and store it in memory
    _config = builder.Build();

    //set the loader connection string loader to get the connection string from the configuration
    DataConnectionStringManager.ConnectionStringLoader = (key) =>
    {
        return _config.GetConnectionString(key);
    };
}

This code shows a .NET Framework application example

DataConnectionStringManager.ConnectionStringLoader = (key) =>
{
    return ConfigurationManager.ConnectionStrings[key].ConnectionString;
});

You can also manually add a ConnectionString by calling DataConnectionStringManager.SetConnectionString

DataConnectionStringManager.SetConnectionString("Test", "Data Source=MSSQL; Initial Catalog = SalesDatabase;  Integrated Security=True; MultipleActiveResultSets=True");

Lastly, you can add an override, in debug mode for example for a connection string using the DataConnectionStringManager.AddOverride method

#if DEBUG
    DataConnectionStringManager.AddOverride("Test", "Data Source=MSSQL; Initial Catalog = SalesDatabaseDev;  Integrated Security=True; MultipleActiveResultSets=True");
#endif
Get connection strings

To access a connection string from DataConnectionStringManager you can use the static method DataConnectionStringManager.GetConnectionString method.

using (var aDc = new DataConnection(DataConnectionStringManager.GetConnectionString("Default")))
{

}

This will try a return the Connection string in the following order

  • DataConnectionStringManager.ConnectionStringLoader (if set and returns a value)
  • Check for an override set via DataConnectionStringManager.AddOverride
  • Check for a entry in DataConnectionStringManager.Instance.ConnectionStrings

DataConnection

DataConnection is a SqlClient based class that provides simplified access to a MS Sql database connection with an easy to use API

Creating a new instance is fairly simple

using (var aDc = new DataConnection(DataConnectionStringManager.GetConnectionString("Default")))
{

}
SQL Methods

There are a number of standard SQL execution methods that allow you to run and execute SQL script on the SQL Server.

Note: DataConnection will handle opening and connecting to the server itself, you don't need to explicitly do it

This is a simple query that returns a DataTable with the results of the query

using (var aDc = new DataConnection(DataConnectionStringManager.GetConnectionString("Default")))
{
    var dtresults = await aDc.QueryAsync("Select * from Customers");
}

This is the same query with a list of parameters and a where statement

using (var aDc = new DataConnection(DataConnectionStringManager.GetConnectionString("Default")))
{
    var pars = new List<DbParameter>()
    {
        new SqlParameter("@CustomerId",12345)
    };

    var sSql = "Select * from Customers";
    sSql += " WHERE CustomerId = @CustomerId";


    var dtresults = await aDc.QueryAsync(sSql, pars);
}

You can also query a stored procedure and return the results

using (var aDc = new DataConnection(DataConnectionStringManager.GetConnectionString("Default")))
{
    var pars2 = new List<DbParameter>()
    {
        new SqlParameter("@CustomerId",12345)
    };

    var dtresults2 = await aDc.QueryAsync("GetCustomerInvoices", pars, CommandType.StoredProcedure);
}

Executing SQL statements is also as simple:

using (var aDc = new DataConnection(DataConnectionStringManager.GetConnectionString("Default")))
{
    var pars3 = new List<DbParameter>()
    {
        new SqlParameter("@CustomerId",12345),
        new SqlParameter("@OrderNo",12345),
        new SqlParameter("@OrderStatus", "Confirmed"),
    };

    await aDc.ExecuteAsync("UpdateOrderStatus", pars3, CommandType.StoredProcedure);
}
Non-SQL Methods

DataConnection also provides some non-sql methods for inserting and updating data without writing SQL at all.

DataConnection.UpdateManyAsync allows you to provide a dictionary of columns and values to update, along with a dictionary for filtering the records to be updated, which can be used to update the specific table without writing SQL script

using (var aDc = new DataConnection(DataConnectionStringManager.GetConnectionString("Default")))
{
    var dict = new Dictionary<string, object>();
    dict.Add("LastUpdated", DateTime.Now);
    dict.Add("UpdatedById", allocatedById);

    aTran = DataConnection.BeginTransaction();

    var wheredict = new Dictionary<string, object>();
    wheredict.Add("DatabaseName", databaseName);
    wheredict.Add("Tran_Number", transactionId);

    await DataConnection.UpdateManyAsync("JobExpenses", wheredict, dict, transaction: aTran);

    aTran.Commit();
}

Extensions

There are a number of extensions that help we passing values through to the database, as parameters.

  • DateTime.AsValueOrDbNull
    • Will return DBNull.Value if the DateTime? object has no value
  • DataRow.WhenValid
    • Simplified convert a column value to a real value
  • NameValueCollection.ValueAsInt
    • Returns the value as int if its not null and can be converted to an int
  • string.AsValueOrDbNull
    • Return a DBNull.Value if the string is empty, null or whitespace or the value otherwise
  • string.AsValueOrDefault
    • Returns the default value if the string is empty, null or whitespace or the value otherwise
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
.NET Framework net462 is compatible.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on DSoft.System.Data.Common.Extensions:

Package Downloads
DSoft.Microsoft.Data.SqlClient.Helpers

Helpers and extensions for Microsoft.Data.SqlClient

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
5.1.2412.11 123 12/1/2024
5.1.2406.202 291 6/20/2024
4.7.0.1 2,527 8/19/2020
4.7.0 687 5/16/2020
4.6.0.19362-preview7 379 8/1/2019
4.6.0 757 9/24/2019
4.6.0-preview9.19421.4 285 9/10/2019

Added support for .NET 9.0, removed .NET 6.0