Вопрос:

Как подключиться к локальной базе данных Azure MySQL In App с помощью c #

mysql azure

833 просмотра

2 ответа

30 Репутация автора

Я пробовал несколько способов без успеха (OdbcConnection, MySqlConnection, ...). С PHP это работало в течение минуты. Но я хочу получить доступ к базе данных с помощью веб-службы (asmx).

Веб-сервис возвращает верную информацию обратно:

MYSQLCONNSTR_localdb = Environment.GetEnvironmentVariable("MYSQLCONNSTR_localdb").ToString();
dbhost = Regex.Match(MYSQLCONNSTR_localdb, @"Data Source=(.+?);").Groups[1].Value;
dbname = Regex.Match(MYSQLCONNSTR_localdb, @"Database=(.+?);").Groups[1].Value;
dbusername = Regex.Match(MYSQLCONNSTR_localdb, @"User Id=(.+?);").Groups[1].Value;
dbpassword = Regex.Match(MYSQLCONNSTR_localdb, @"Password=(.+?)$").Groups[1].Value;

База данных = localdb; Источник данных = 127.0.0.1: xxxxx; Идентификатор пользователя = azure; Пароль = blabla

Но как получить доступ к базе данных localdb?

С помощью new OdbcConnection("DRIVER={MySQL ODBC 5.3 unicode Driver};...

При использовании этого метода я получаю сообщение об ошибке: System.Data.Odbc.OdbcException: ОШИБКА [IM002] [Microsoft] [Диспетчер драйверов ODBC] Не найдено имя источника данных и не указан драйвер по умолчанию

Я ожидаю, что он работает иначе, чем база данных MySQL в Azure. Но как для MySQL в приложении?

Спасибо за помощь заранее!

Автор: Rene M Источник Размещён: 05.01.2018 12:11

Ответы (2)


1 плюс

612 Репутация автора

У меня тоже была эта проблема. Вы должны передать порт отдельно, например:

string connectionString = 
   string.Format("Server=127.0.0.1; Port=54511; Database=localdb; Uid=azure; Pwd=password");

MySqlConnection conn = new MySqlConnection(connectionString);

Если вы используете hibernate.cfg.xml (внутри папки bin):

<?xml version="1.0" encoding="utf-8"?>

<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
  <session-factory name="NHibernate.Test">
    <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
    <property name="connection.connection_string">
      Database=mydb;Data Source=127.0.0.1;Port=54511;User Id=azure;Password=password      
    </property>
    <property name="dialect">NHibernate.Dialect.MySQLDialect</property>
  </session-factory>
</hibernate-configuration>
Автор: Wagner Bertolini Junior Размещён: 09.06.2018 05:49

1 плюс

484 Репутация автора

Вот что я сделал для решения своей проблемы: Мое приложение - ASP Core WebAPI. это уже здесь https://stackoverflow.com/a/56092886/2768516

  public class LocalAppDb : DbContext
    {

        public DbSet<LocalUser> Users { get; set; }
        //Other Data Sets....

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            string connection = Environment.GetEnvironmentVariable("MYSQLCONNSTR_localdb");
            string dbhost = Regex.Match(connection, @"Data Source=(.+?);").Groups[1].Value;
            string server = dbhost.Split(':')[0].ToString();
            string port = dbhost.Split(':')[1].ToString();
            string dbname = Regex.Match(connection, @"Database=(.+?);").Groups[1].Value;
            string dbusername = Regex.Match(connection, @"User Id=(.+?);").Groups[1].Value;
            string dbpassword = Regex.Match(connection, @"Password=(.+?)$").Groups[1].Value;

            string connectionString2 = $@"server={server};userid={dbusername};password={dbpassword};database={dbname};port={port};pooling = false; convert zero datetime=True;";

            optionsBuilder.UseMySql(connectionString2);
        }

    }

тогда я могу назвать класс DB следующим образом:

using (LocalAppDb context = new LocalAppDb())
   {
       var result = context.Users.ToList(); 
       //or context.Insert....., update,,,,etc
   }
Автор: Olorunfemi Ajibulu Размещён: 11.05.2019 05:51
Вопросы из категории :
32x32