Щеголь не может найти соединение MVC3


Недавно я создал новый проект в MVC3 и подключил к нему базу данных MySQL без проблем. Я могу создавать пользователей и роли (используя Universal Providers / SecurityGuard от NuGet). Теперь я пытаюсь выполнить запрос с помощью Dapper для моей страницы редактирования и получить исключение SQL:

Отладка: При установлении соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром. Сервер не найден или недоступен. Проверьте правильность имени экземпляра и что SQL Server настроен на разрешение удаленных подключений. (provider: Named Pipes Provider, error: 40-не удалось открыть соединение с SQL Server)

ИСОД:

The system cannot find the file specified.
         var connection = new SqlConnection(connString);

         connection.Open();
         return connection;
     }

Вот что я пытаюсь сделать:

Паутина.конфигурация:

  <connectionStrings>
     <add name="DefaultConnection" connectionString="Database=[database];Data Source=localhost;Uid=[username];Pwd=[password];" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>

<membership defaultProvider="MySqlMembershipProvider">
  <providers>
    <clear />
    <add name="MySqlMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.6.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" autogenerateschema="true" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="/" />
  </providers>
</membership>
<profile defaultProvider="MySQLProfileProvider">
  <providers>
    <clear />
    <add name="MySQLProfileProvider" type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.6.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
  </providers>
</profile>
<roleManager enabled="true" defaultProvider="MySqlRoleProvider">
  <providers>
    <clear />
    <add connectionStringName="DefaultConnection" applicationName="/" autogenerateschema="True" name="MySQLRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.6.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
  </providers>
</roleManager>

ДБ.cs:

public class Db
{
    public static IDbConnection GetOpenConnection()
    {
        var connString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;

        var connection = new SqlConnection(connString);

        //---- Hangs Here ----//
        connection.Open();
        return connection;
    }
}

MembershipController:

var connection = Db.GetOpenConnection();
    {
            const string conn = @"SELECT id
                               FROM my_aspnet_users
                               WHERE name = @UserName";

            var result = connection.Query<UserViewModel>(conn, new { userName }).Single();

            viewModel.Id = result;
        }

Я никогда не добираюсь до контроллера, так как он зависает при попытке открыть соединение. Я новичок в работе с MySQL, поэтому это может быть что-то, что я пропустил или забыл добавлять. Спасибо!

2 2

2 ответа:

Выяснил мою проблему. Я пытался использовать

var connection = new SqlConnection(connString);

, который не поддерживается MySQL. Вместо этого я нашел , соединяющий ASP.NET приложение MVC к MySQL , которое использовало соответствующий коннектор.

using (var connection = new MySqlConnection(ConnectionString))
using (var cmd = connection.CreateCommand())
{
connection.Open();
cmd.CommandText = "SELECT name FROM foo;";
using (var reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        string name = reader.GetString(reader.GetOrdinal("name"));
        // TODO: do something with the name ...
    }
}

}

На лицевой стороне код выглядит нормально, я подозреваю, что это проблема со строкой соединения. Основываясь на недавнем проекте MySql, над которым я работал, строка подключения немного отличается. Вы можете попробовать следующее (обратите внимание, что источник данных изменен на сервер)

<connectionStrings>
     <add name="DefaultConnection" connectionString="Server=localhost;Database=[database];Uid=[username];Pwd=[password];" providerName="MySql.Data.MySqlClient" />
</connectionStrings>

Некоторые из MySQL connectionstrings в здесь : http://www.connectionstrings.com/mysql