Вот строка подключения:

<connectionStrings>
    <add name="DBConnection" connectionString="Data Source=Personal-PC;Initial Catalog=LocalDB;Persist Security Info=True;User ID=google;Password=google" providerName="System.Data.SqlClient" />
</connectionStrings>

Это код позади:

public string connectionString = ConfigurationManager.ConnectionStrings["DBConnection"].ToString();

public void ExecuteSQL(string sqlstring, List<SqlParameter> sqlparam)
{
    try
    {
        SqlConnection objsqlconn = new SqlConnection();
        objsqlconn.ConnectionString = connectionString;
        if (objsqlconn.State != ConnectionState.Open)
        {
            objsqlconn.Close();
            objsqlconn.Dispose();
            objsqlconn.Open();
        }

        SqlCommand objcmd = new SqlCommand(sqlstring, objsqlconn);
        int i, cnt = sqlparam.Count();

        for (i = 0; i < cnt; i++)
            objcmd.Parameters.Add(sqlparam[i]);
        objcmd.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message);
    }
}

И я получил следующую ошибку. Когда я пытаюсь вставить данные в таблицу sql. На самом деле, в чем смысл и как решить эту ошибку.

System.InvalidOperationException was caught
  HResult=-2146233079
  Message=The ConnectionString property has not been initialized.
  Source=System.Data
  StackTrace:
       at System.Data.SqlClient.SqlConnection.PermissionDemand()
       at System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection outerConnection)
       at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
       at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
       at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
       at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
       at System.Data.SqlClient.SqlConnection.Open()
       at DBdml.DBACC.InsertUpdateDeleteSQLString(String sqlstring, List`1 sqlparam) in D:\dotnet\ASP.netC#\BusinessLayer\DBACC.cs:line 78
  InnerException: 
-2
Sundar 16 Окт 2014 в 17:23
6
Просто посмотрите на сообщение «Свойство ConnectionString не было инициализировано».
 – 
Habib
16 Окт 2014 в 17:24
1
@ user2721764: Все объекты удаляются в конце жизненного цикла страницы. Это может быть причиной. Покажите, каким методом вы назначаете ConnectionString и где используете соединение. Приведенный выше код не будет компилироваться, потому что connectionString — это поле.
 – 
Tim Schmelter
16 Окт 2014 в 17:33
1
Поскольку вы реконструируете объект каждый раз, когда можете заменить if (objsqlconn.State != ConnectionState.Open) на if (true)
 – 
Conrad Frix
16 Окт 2014 в 17:38
1
Теперь вы пропустили поле connectionString. Кроме того, вы должны использовать throw (или опустить Catch) вместо throw new Exception(ex.Message), чтобы сохранить исходную трассировку стека, включая номера строк.
 – 
Tim Schmelter
16 Окт 2014 в 17:40
3
Вы уверены, что вам не нужно WebConfigurationManager вместо ConfigurationManager.
 – 
Patrick Hofman
16 Окт 2014 в 17:40

2 ответа

Эта последовательность убьет вас:

objsqlconn.Close();
objsqlconn.Dispose();
objsqlconn.Open();

Вы не можете использовать объект подключения после его удаления. На самом деле, вы можете значительно упростить весь этот метод:

public void ExecuteSQL(string sqlstring, IEnumerable<SqlParameter> sqlparam)
{
    using (SqlConnection cn = new SqlConnection(connectionString))
    using (SqlCommand cmd = new SqlCommand(sqlstring, objsqlconn))
    {
        cmd.Parameters.AddRange(sqlparam.ToArray());
        cn.Open();
        cmd.ExecuteNonQuery();
    }
}
2
Joel Coehoorn 16 Окт 2014 в 18:21
Это так просто, что мы все пропустили это. Вы еще не потеряли свои навыки программирования ;)
 – 
Patrick Hofman
16 Окт 2014 в 18:23

Вы должны использовать WebConfigurationManager вместо ConfigurationManager для чтения из файла web.config.

Инструкции находятся здесь на MSDN и просто включает замену имени класса в вашем случае.

0
Patrick Hofman 16 Окт 2014 в 17:45