Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何验证ConnectionString是否存在,如果不存在,则不抛出错误 在应用程序配置中找不到连接名称“MySqlServer”,或者连接字符串为空。_C#_Connection String_Validation - Fatal编程技术网

C# 如何验证ConnectionString是否存在,如果不存在,则不抛出错误 在应用程序配置中找不到连接名称“MySqlServer”,或者连接字符串为空。

C# 如何验证ConnectionString是否存在,如果不存在,则不抛出错误 在应用程序配置中找不到连接名称“MySqlServer”,或者连接字符串为空。,c#,connection-string,validation,C#,Connection String,Validation,因此,我有一个带有面板的页面,当在web配置中找到连接并且连接有效时,该页面将显示该面板;使用try/catch,只要add name“VALUE”在配置连接字符串中,如果服务器数据不正确,则将加载页面并将面板设置为不可见。。。我需要能够处理以下问题 如果aspx中使用了本例中的命名值MySqlServer;aspx.cs,但未在配置中找到,我不希望出现错误;找不到连接名称。。。。我只是不想像找到名称但数据不正确时SqlConnection.Open失败时那样显示面板 aspx 配置 <c

因此,我有一个带有面板的页面,当在web配置中找到连接并且连接有效时,该页面将显示该面板;使用try/catch,只要add name“VALUE”在配置连接字符串中,如果服务器数据不正确,则将加载页面并将面板设置为不可见。。。我需要能够处理以下问题

如果aspx中使用了本例中的命名值MySqlServer;aspx.cs,但未在配置中找到,我不希望出现错误;找不到连接名称。。。。我只是不想像找到名称但数据不正确时SqlConnection.Open失败时那样显示面板

aspx

配置

<connectionStrings>
        <add name="NotMySqlServer" providerName="System.Data.SqlClient" connectionString="server=TEST\SQL2005;database=ADB;Integrated Security=True"/>
<add name="NotMy2SqlServer" providerName="System.Data.SqlClient" connectionString="server=TEST\SQL2005;database=ADB;Integrated Security=True"/>

    </connectionStrings>

您可以使用count检查是否存在任何连接字符串

var count = ConfigurationManager.ConnectionStrings.Count;
if (count > 0)
{
    //There is at least more then one connection string.
}
更新

public static class Extension
{
    public static bool HasConnectionString(this ConnectionStringSettingsCollection value, string key)
{
    try
    {
        return value[key].ConnectionString.Length > 0;
    }catch 
    {
        return false;
    }
}
}
您可以按如下方式使用扩展名

if (ConfigurationManager.ConnectionStrings.HasConnectionString("MySqlServer"))
{
    //If true you know there is a valid connectionstring.
}
您可以尝试:

if(ConfigurationManager.ConnectionStrings["MySqlServer"] == null) throw ...

如果您使用的是.NET 4.5+,并且有权访问C#6.0,则可以使用null条件运算符(
)尝试获取连接字符串,而不会自动引发异常:

string connectionString = ConfigurationManager.ConnectionStrings["MySqlServer"]?.ConnectionString;
//------------------------------------------------------------------------HERE-^-HERE-------------

if (string.IsNullOrWhiteSpace(connectionString))
{
    // Don't even bother trying to open the connection.
    // Log the error and either rethrow the exception (throw;) or exit from your current context (return;).
    //return;
    //throw;
}

// If your code has made it this far, it means you have a valid connection string.  Now try to use it.
using (var sqlConnection = new SqlConnection(connectionString))
{
    sqlConnection.Open();

    using (var sqlCommand = new SqlCommand)
    {
        // Do stuff.
    }
}

如何具体计算ConnectionString“name”=“MySqlServer”我认为最好检查:
string.IsNullOrWhiteSpace(连接字符串)
FYI:?是空条件运算符,而不是空合并运算符。请参阅:您完全正确--捕捉得很好。我更新了我的描述以合并该修复。
if(ConfigurationManager.ConnectionStrings["MySqlServer"] == null) throw ...
string connectionString = ConfigurationManager.ConnectionStrings["MySqlServer"]?.ConnectionString;
//------------------------------------------------------------------------HERE-^-HERE-------------

if (string.IsNullOrWhiteSpace(connectionString))
{
    // Don't even bother trying to open the connection.
    // Log the error and either rethrow the exception (throw;) or exit from your current context (return;).
    //return;
    //throw;
}

// If your code has made it this far, it means you have a valid connection string.  Now try to use it.
using (var sqlConnection = new SqlConnection(connectionString))
{
    sqlConnection.Open();

    using (var sqlCommand = new SqlCommand)
    {
        // Do stuff.
    }
}