bestsource

ConnectionString 속성이 초기화되지 않았습니다."를 수정하는 방법

bestsource 2023. 8. 7. 22:46
반응형

ConnectionString 속성이 초기화되지 않았습니다."를 수정하는 방법

애플리케이션을 시작하면 다음과 같은 메시지가 표시됩니다.연결 문자열 속성이 초기화되지 않았습니다.

Web.config:

<connectionStrings>
    <add name="MyDB"
         connectionString="Data Source=localhost\sqlexpress;Initial Catalog=mydatabase;User Id=myuser;Password=mypassword;" />
</connectionStrings>

스택은 다음과 같습니다.

System.Data.SqlClient.SqlConnection.PermissionDemand() +4876643
System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection outerConnection) +20
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +117
System.Data.SqlClient.SqlConnection.Open() +122

저는 꽤 생소합니다.NET과 저는 이것을 이해하지 못합니다.저는 구글에서 많은 답을 찾았지만, 아무도 제 문제를 해결하지 못했습니다.

그게 무슨 의미죠?내 web.config가 나쁜가요?제 기능이 안 좋은가요?SQL 구성이 제대로 작동하지 않는 것입니까(sqexpress 사용)?

여기서 제 주된 문제는 어디서부터 디버깅을 시작해야 할지 모른다는 것입니다.뭐든 도움이 될 겁니다

편집:

오류 코드:

MySQLHelper.ExecuteNonQuery(
ConfigurationManager.AppSettings["ConnectionString"],
CommandType.Text,
sqlQuery,
sqlParams);

sqlQuery는 "select * from table"과 같은 쿼리입니다. sqlParams는 여기서 관련이 없습니다.

여기서 또 다른 문제는 회사에서 MySQLHelper를 사용하고 있으며 이에 대한 가시성이 없다는 것입니다(헬퍼 lib용 dll만 있음).다른 프로젝트에서도 잘 작동하고 있기 때문에 여기서 오류가 발생하지 않는 것이 99%라고 생각합니다.

코드를 보지 않고 디버깅할 방법이 없다면 코드를 얻기 위해 이 도우미를 만든 사람에게 연락하기 위해 기다려야 할 것 같습니다.

연결 문자열을 참조하는 작업은 다음과 같이 수행해야 합니다.

MySQLHelper.ExecuteNonQuery(
ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString,
CommandType.Text,
sqlQuery,
sqlParams);

ConfigurationManager.AppSettings["ConnectionString"]안을 들여다보고 있을 것입니다.AppSettings라는 이름의 것 때문에.ConnectionString발견하지 못할 것입니다.가 " 이것당오메표가이시다유니입된지시이류의"로 표시된 이유입니다."ConnectionString" property has not been initialized초기화된 속성을 찾고 있기 때문입니다.AppSettings이름 지어진ConnectionString.

ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString이름이 "MyDB"인 연결 문자열을 찾도록 지시합니다.

web.config 연결 문자열 사용에 대해 이야기하는 사람이 있습니다.

데이터 원본이 데이터에 바인딩하려고 하지만 연결 문자열을 찾을 수 없기 때문에 바인딩할 수 없는 경우 이 오류가 발생합니다.제 경험에 따르면, 이것은 일반적으로 web.config의 오류 때문이 아닙니다(이것에 대해 100% 확신은 없지만).

데이터 소스(예: SqlDataSource)를 프로그래밍 방식으로 할당하거나 쿼리를 생성하는 경우(예: SqlConnection/SqlCommand 조합 사용) 연결 문자열을 할당했는지 확인합니다.

var connection = new SqlConnection(ConfigurationManager.ConnectionStrings[nameOfString].ConnectionString);

데이터 원본(예: GridView 또는 ComboBox에서 SqlDataSource로)에 데이터 바인딩 요소를 연결하는 경우 데이터 원본이 연결 문자열 중 하나에 할당되어 있는지 확인합니다.

(데이터 바인딩 요소와 web.config가 안전하도록) 코드를 게시하면 확인할 수 있습니다.

편집: AppSettings 영역에서 연결 문자열을 가져오려고 하는데 프로그래밍 방식으로 연결 문자열이 존재하지 않는 것이 문제라고 생각합니다.로 대체해 보십시오.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString(ConnectionString이 연결 문자열의 이름인 경우).

연결 문자열이 AppSettings없습니다.

찾고 있는 것은 다음과 같습니다.

System.Configuration.ConfigurationManager.ConnectionStrings["MyDB"]...

웹 api As Net Core 프로젝트를 진행하던 중 같은 문제에 걸려 넘어졌습니다.코드의 참조를 다음으로 변경하라는 제안을 따릅니다.

ConfigurationManager.ConnectionStrings["NameOfTheConnectionString"].ConnectionString

시스템에 참조를 추가합니다.configuration.dll로 인해 "Reference not valid or not supported" 오류가 발생했습니다.

Configuration manager error

문제를 해결하기 위해 패키지를 다운로드해야 했습니다.System.Configuration.ConfigurationManagerNuGet 사용(툴 -> Nugget 패키지 -> 솔루션의 Nugget 패키지 관리

내가 만들 때 발견한 것은Sqlconnection = new SqlConnection()나는 나의 것을 패스하는 것을 잊었습니다.connectionString변수.그래서 초기화 방법을 변경했습니다.connectionString(변경 사항 없음).

그리고 만약 당신이 나를 좋아한다면 당신의 끈 연결을 잊지 마세요.SqlConnection매개 변수

Sqlconnection = new SqlConnection("ConnString")

이것이 저에게 효과가 있었습니다.

var oSQLConn = new 
SqlConnection(
System.Configuration.ConfigurationManager.ConnectionStrings["Conn1"].ToString()
);

위에서 언급한 모든 답변을 시도한 경우 잘못된 SQL 연결 확인 조건을 기반으로 새 SQL 연결을 생성할 수 있습니다.다음은 시나리오입니다.

이전에 초기화되지 않은 경우 새 SQL 연결을 반환하는 일반적인 방법입니다. 그렇지 않으면 기존 연결이 반환됩니다.

public SqlConnection GetSqlconnection()
{
    try
    {
        if(sqlConnection!=null)
        {
            sqlConnection = new SqlConnection(WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

        }
        return sqlConnection;
    }catch(Exception e )
    {
        WriteLog.WriteErrorLog(log, "GetSqlconnection() | ", e.Message, e.StackTrace);
        throw e;
    }
    // return sqlConnection;
    
}

//here two methods which are using above GetSqlconnection() method 

public void getUser()
{
//call to GetSqlconnection() method to fetch user from db 
//connection.open() 
//query execution logic will be here 
//connection.close() <---here is object state changed --->
}

public void getProduct()
{
//call to GetSqlconnection() method with no connection string properties
//connection.open() ; <--- here exception will be thrown as onnectionstring-property-has-not-been-initialized
//query execution logic will be here .
//connection.close(). 
}

getUser() 메서드에서 연결을 닫자마자 sqlconnection 개체 1에서 두 가지 변경 사항이 발생합니다.상태가 '열림'에서 '닫힘' 2로 변경되었습니다.ConnectionString 속성이 ""로 변경됩니다.

따라서 GetSqlconnection()의 if-Condition에 따라 getProduct()에서 GetSqlconnection() 메서드를 호출하면 이 메서드는 sqlConnection의 기존 개체를 반환하지만 상태는 'Closed'이고 ConnectionString은 "."이므로 connection.open()에서는 연결 문자열이 비어 있으므로 예외를 던집니다.

sqlConnection을 재사용하는 동안 이 문제를 해결하려면 GetSqlconnection() 메서드에서 아래와 같이 확인해야 합니다.

try
{
    if(sqlConnection==null || Convert.ToString(sqlConnection.State)=="Closed") 
    {
        sqlConnection = new SqlConnection(WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

    }
    return sqlConnection;
}catch(Exception e )
{
    WriteLog.WriteErrorLog(log, "GetSqlconnection() | ", e.Message, e.StackTrace);
    throw e;
}

저의 경우, "ConnectionStrings"라는 단어에서 한 글자도 누락되어 appsettings.json 속성과 일치하지 않아 이러한 오류가 발생했습니다.오류는 생각만큼 깊을 수 없습니다.맞춤법 오류로 디버깅을 시작합니다.

이 문제를 정확하게 해결할 수도 없고 조사할 시간도 없었지만, 제 경우 Windows Server 2012 R2 또는 프레임워크 버전과 관련이 있었습니다.다른 Windows 버전을 실행하는 다른 컴퓨터에서도 동일한 코드, 앱 및 구성 파일이 완벽하게 작동했습니다.최소한 소비자 버전(Windows 8, 10 및 11)을 사용해 봅니다.윈도우즈 Server 2012만 거부하고 다음 오류가 발생했습니다.

System.Data.SqlClient.SqlConnection.PermissionDemand()

.cs에서 다음과 합니다. 예: startup.cs 에서다 연문제다니공합.services.Configure<Readconfig>(Configuration.GetSection("ConnectionStrings"));

Appsetting.json 및 Program.cs 의 연결 문자열이 같을 수 없습니다.

enter image description here

아래 예와 같이 () 대신 []를 사용합니다.

SqlDataAdapter adapter = new SqlDataAdapter(sql, ConfigurationManager.ConnectionStrings["FADB_ConnectionString"].ConnectionString);
            DataTable data = new DataTable();
            DataSet ds = new DataSet();

언급URL : https://stackoverflow.com/questions/1007786/how-to-fix-the-connectionstring-property-has-not-been-initialized

반응형