I am using entity framework to make 2 queries, one after the another, the first one always works fine, but the second one always returns me: The ConnectionString property has not been initialized.
If I change the order of the methods, the same thing happen, the first one works fine, the second one throws this exception.
the code I use in the page is as follows:
> var count = RequestBaseBL.GetGenericResultsCount(query.QuerySql);
>
> var datatable = RequestBaseBL.GetGenericResults(query.QuerySql, 0);
and in my DAL
public int GetGenericResultsCount(string strsql)
{
using (var connection = (SqlConnection)_context.Database.Connection)
{
var adapter = new SqlDataAdapter(strsql, connection);
var results = new DataSet();
adapter.Fill(results, "Results");
return results.Tables["Results"].Rows.Count;
}
}
public DataTable GetGenericResults(string strsql, int pageIndex)
{
StringBuilder sb = new StringBuilder();
sb.Append("WITH MyPagedData as ( ");
int indexFrom = strsql.IndexOf("from");
sb.Append(strsql.Substring(0, indexFrom));
sb.Append(", ");
sb.Append("ROW_NUMBER() OVER(ORDER BY RequestBaseId DESC) as RowNum ");
sb.Append(strsql.Substring(indexFrom));
sb.Append(") ");
sb.Append("SELECT * from MyPagedData where RowNum between @StartIndex and @StartIndex + 10");
using(var connection = (SqlConnection)_context.Database.Connection)
{
var adapter = new SqlDataAdapter(sb.ToString(), connection);
adapter.SelectCommand.Parameters.Add("@StartIndex", SqlDbType.Int).Value = pageIndex;
var results = new DataSet();
adapter.Fill(results, "Results");
return results.Tables["Results"];
}
}
Re: ConnectionString property has not been initialized- issue. Hi, This may happen if you are not populating the SQL connection string parameters (i.e. Server, Username, Password, etc) at install time into your config file.
The ConnectionString property can be set only when the connection is closed. Many of the connection string values have corresponding read-only properties. When the connection string is set, these properties are updated, except when an error is detected. In this case, none of the properties are updated.
config file in the Views folder.) Find the <connectionStrings> element: Add the following connection string to the <connectionStrings> element in the Web. config file.
In general, the using
construct should be used when you create an object assigned to the variable, either with the new
operator or though a factory method. The Connection
property of Database
in DbContext
creates the connection only if it does not exist already; in all other cases, the property simply returns an existing one.
In your code, the first invocation gets a "live" connection, operates on it, and then closes it through the call of Dispose
implicitly performed by using
. At this point, the Database
of DbContext
has a reference to a released object. The second invocation picks up that released object, and tries to use it, triggering an error.
To fix this, simply replace using
with assignments:
var connection = (SqlConnection)_context.Database.Connection;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With