Using Visual Studio and Dapper, how do I use a connection string?

.net-core asp.net asp.net-mvc c# dapper

Question

I am trying to get a Connection String set up in my .Net Core application but i keep getting the error:

System.NullReferenceException: 'Object reference not set to an instance of an object.'

I have tried adding the following to appsettings.json:

"ConnectionStrings": {

"Analysis": "Server=DESKTOP-MYSERVER;Database=MYDATABASE;User Id=sa; Password=Password123;Provider=System.Data.SqlClient;Trusted_Connection=True;MultipleActiveResultSets=true;Pooling=false;"
}

I also tried using web.config like I used to before .Net Core:

<connectionStrings>
<add name="Analysis" providerName="System.Data.SqlClient" 
     connectionString="Server=DESKTOP-MYSERVER;Database=MYDATABASE;User Id=sm;Password=Password123;"/>

Then in c# i have:

public List<DapperTest> ReadAll()
    {
        var data = new List<DapperTest>();
        using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["Analysis"].ConnectionString))
        {
             data = db.Query<DapperTest>("select * from testTable").ToList();
        }

        return data;
    }

Both ways give me the exception of:

System.NullReferenceException: 'Object reference not set to an instance of an object.'

I have used the following resources:

.Net CORE Dapper Connection String?

https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

Get connection string from App.config

But I am missing something. I have only set up connection strings once and it was not in .Net Core so it could be obvious to others.

1
7
9/13/2017 3:30:50 AM

Accepted Answer

If you are using appsettings.json, create a simple POCO class to model your connection string configurations like this:

public class ConnectionConfig
{
        public string Analysis {get;set;}
}

Add this line in ConfigureServices method in Startup.cs

services.Configure<ConnectionConfig>(Configuration.GetSection("ConnectionStrings"));

Data service class

class YourClass{
    private string _connectionString;

    YourClass(string connectionString){
       _connectionString = connectionString;
    }

    //Your implementation
    public List<DapperTest> ReadAll()
    {
        var data = new List<DapperTest>();
        using (IDbConnection db = new SqlConnection(_connectionString)
        {
            data = db.Query<DapperTest>("select * from testTable").ToList();
        }

       return data;
   }
}

Inject IOptions<ConnectionConfig> in your controller constructor .

class YourController : Controller{
   YourClass _testing;

   YourController(IOptions<ConnectionConfig> connectionConfig){
       var connection = connectionConfig.Value;
       string connectionString = connection.Analysis;
       _testing = new YourClass(connectionString );
    }
   public IActionResult Index() { 
        var testingData = _testing.ReadAll(); 
        return View(); 
     }
 }
6
9/13/2017 3:08:57 AM


Related Questions





Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow