asp.net 如何修复“ConnectionString属性尚未初始化”

jm81lzqq  于 2022-11-19  发布在  .NET
关注(0)|答案(8)|浏览(293)

当 我 启动 应用 程序 时 , 我 得到 :* * * 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 相当 陌生 , 我 不 明白 这个 问题 。 我 在 Google 上 找到 了 很多 答案 , 但 没有 一 个 真正 解决 了 我 的 问题 。
这 意味 着 什么 ? 我 的 web.config 坏 了 吗 ? 我 的 函数 坏 了 吗 ? 我 的 SQL 配置 没有 正常 工作 吗 ( 我 正在 使用 sqlexpress ) ?
这里 我 的 主要 问题 是 我 不 确定 从 哪里 开始 调试 这个 ... 任何 东西 都会 有 帮助 。
编辑 :
失败 代码 :

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

格式
sqlQuery 是 一 个 类似 于 " select * from table " 的 查询 。 sqlParams 在 这里 不 相关 。
这里 的 另 一 个 问题 是 我 的 公司 使用 MySQLHelper , 而 我 对 它 没有 可见 性 ( 只有 一 个 用于 帮助 器 库 的 dll ) 。 它 在 其他 项目 中 工作 得 很 好 , 所以 我 有 99% 的 把握 错误 不是 来自 这里 。
我 想 如果 没有 办法 在 不 看到 代码 的 情况 下 调试 它 , 我 将 不得 不 等待 与 创建 此 助手 的 人 取得 联系 , 以便 获得 代码 。

iklwldmw

iklwldmw1#

引用连接字符串的方式如下:

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

ConfigurationManager.AppSettings["ConnectionString"]将在AppSettings中查找名为ConnectionString的内容,但找不到。这就是错误消息指示"ConnectionString" property has not been initialized的原因,因为它正在查找名为ConnectionStringAppSettings的初始化属性。
ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString指示查找名为“MyDB”的连接字符串。
Here is someone talking about using web.config connection strings

qco9c6ql

qco9c6ql2#

当 数据 源 试图 绑定 到 数据 但 由于 找 不 到 连接 字符 串 而 无法 绑定 时 , 您 会 得到 此 错误 。 根据 我 的 经验 , 这 通常 不 是 由于 web . config 中 的 错误 ( 尽管 我 不 能 100% 确定 这 一 点 ) 。
如果 您 是 以 程序 设计 方式 指派 数据 来源 ( 例如 SqlDataSource ) 或 建立 查询 ( 也 就是 使用 SqlConnection/SqlCommand 组合 ) , 请 确定 已 指派 ConnectionString 。

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

中 的 每 一 个
如果 您 要 将 数据 系 结 项目 链接 至 数据 来源 ( 例如 , 将 GridView 或 ComboBox 链接 至 SqlDataSource ) , 请 确定 已 将 数据 来源 指派 给 其中 一 个 连接 字串 。
发布 您 的 代码 ( 为了 数据 绑定 元素 和 web.config 的 安全 ) , 我们 可以 查看 它 。

    • EDIT : * * 我 认为 问题 是 您 试图 从 AppSettings 区域 获取 连接 字符 串 , 但 以 编程 方式 获取 的 连接 字符 串 并 不 存在 。 请 尝试 将 其 替换 为 ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString ( 如果 ConnectionString 是 连接 字符 串 的 名称 ) 。
31moq8wy

31moq8wy3#

*AppSettings*中的连接字符串不是

您要查找的内容位于:

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

8yoxcaq74#

我在一个Web API Asp Net Core项目中遇到了同样的问题。我按照建议将代码中的引用更改为:

ConfigurationManager.ConnectionStrings["NameOfTheConnectionString"].ConnectionString

但添加对System.Configuration.dll的引用导致错误“引用无效或不受支持”。

为了解决这个问题,我不得不使用NuGet(Tools -〉Nuget Package-〉Manage Nuget packages for the solution)下载软件包System.Configuration.ConfigurationManager

icnyk63a

icnyk63a5#

我发现当我创建Sqlconnection = new SqlConnection()时,我忘记传递我的connectionString变量,这就是为什么我改变了初始化connectionString的方式(什么也没有改变)。
如果你和我一样,别忘了把你的字符串连接传递给SqlConnection参数。
Sqlconnection = new SqlConnection("ConnString")

x9ybnkn6

x9ybnkn66#

这对我很有效:

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

fcy6dtqo7#

如果您尝试了上面提到的每一个答案,则有可能您正在基于错误的sqlconnection检查条件创建一个新的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属性将更改为“”
因此,当您在getProduct()中调用GetSqlconnection()方法时,根据GetSqlconnection()中的if-Condition,它将返回sqlConnection的现有对象,但状态为'Closed',ConnectionString为““。因此,在connection.open()中,它将抛出异常,因为connectionstring为空。
要在重用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;
}
lmvvr0a8

lmvvr0a88#

使用[]代替(),如下例所示。

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

相关问题