Как проверить ConnectionString существует и, если нет, не выдать ошибку - PullRequest
7 голосов
/ 06 июля 2011

Имя соединения «MySqlServer» не найдено в конфигурации приложений или строка подключения пуста.

Итак, у меня есть страница с панелью, которая будет отображаться при обнаружении соединения в веб-конфигурациии соединение действительно;используя попытку / перехват, пока в строках соединения конфигурации присутствует добавляемое имя «VALUE», если данные сервера плохие, страница будет загружена, а панель настроена как невидимая ... Мне нужно иметь возможность обрабатывать следующее...

Если в этом случае в aspx используется именованное значение MySqlServer;aspx.cs но не найден в конфиге. Я не хочу, чтобы произошла ошибка;имя соединения не найдено .... Я просто не хочу показывать панель, например, когда SqlConnection.Open завершается неудачно, когда имя найдено, но данные неверны ...

aspx

   <asp:SqlDataSource runat="server" ID="allowedIPsSqlDataSource" 
    ConnectionString="<%$ ConnectionStrings:MySqlServer %>"

aspx.cs

string connectionString = ConfigurationManager.ConnectionStrings["MySqlServer"].ToString();
        SqlConnection SqlConnection = new SqlConnection(connectionString);
        SqlCommand SqlCommand = new SqlCommand();
        try
        {
            SqlConnection.Open();

config

<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>

Ответы [ 3 ]

16 голосов
/ 24 января 2013

Вы можете попробовать:

if(ConfigurationManager.ConnectionStrings["MySqlServer"] == null) throw ...
7 голосов
/ 06 июля 2011

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

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.
}
6 голосов
/ 11 октября 2016

Если вы используете .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.
    }
}
...