Dapper Impossible de trouver la connexion ouverte MVC3

asp.net-mvc-3 asp.net-mvc-4 dapper mysql

Question

J'ai récemment créé un nouveau projet dans MVC3 et y ai connecté une base de données MySQL sans problème. Je suis capable de créer des utilisateurs et des rôles (en utilisant Universal Providers / SecurityGuard de NuGet). J'essaie maintenant d'exécuter une requête à l'aide de Dapper pour ma page d'édition et d'obtenir une exception SQL:

Debug: une erreur liée au réseau ou à une instance s'est produite lors de l'établissement d'une connexion à SQL Server. Le serveur est introuvable ou inaccessible. Vérifiez que le nom de l'instance est correct et que SQL Server est configuré pour autoriser les connexions distantes. (fournisseur: fournisseur de canaux nommés, erreur: 40 - Impossible d'ouvrir une connexion à SQL Server)

YSOD:

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

         connection.Open();
         return connection;
     }

Voici ce que j'essaie de faire:

web.config:

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

Db.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;
        }

Je n'arrive jamais au contrôleur, car il se bloque lorsque vous essayez d'ouvrir la connexion. Travailler avec MySQL est une nouveauté, il se peut donc que ce soit quelque chose que j'ai oublié ou que j'ai oublié d'ajouter. Merci!

Réponse acceptée

J'ai compris mon problème. J'essayais d'utiliser

var connection = new SqlConnection(connString);

qui n'est pas supporté avec MySQL. Au lieu de cela, j'ai trouvé Connecter une application ASP.NET MVC à MySQL qui utilisait le bon connecteur.

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

}


Réponse populaire

À première vue, le code semble correct, je pense que cela pose un problème avec la chaîne de connexion. Basé sur un projet MySql récent, j'ai travaillé sur la chaîne de connexion est légèrement différente. Pouvez-vous essayer ce qui suit (la source de données de notification a été modifiée en serveur)

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

Quelques autres liens de connexion MySql ici: http://www.connectionstrings.com/mysql




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi