База данных MVC2 и mySQL - PullRequest
       0

База данных MVC2 и mySQL

0 голосов
/ 30 апреля 2011

Я следую примеру из книги ASP.NET MVC 2 Framework (Стивен Сандерсон), за исключением того, что вместо SQLServer я использую mySQL.

public class ProductsController : Controller
{
    private IProductsRepository productsRepository;
    public ProductsController()
    {
        // Temporary hard-coded connection string until we set up dependency injection
        string connString = "server=xx.xx.xxx.xxx;Database=db_SportsStore;User Id=dbUser;Pwd=xxxxxxxxx;Persist Security Info=True;";
        productsRepository = new SportsStore.Domain.Concrete.SqlProductsRepository(connString);

    }
    public ViewResult List()
    {
        return View(productsRepository.Products.ToList());
    }
}

Когда я запускаю проект, яполучить следующую ошибку:

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

Я загрузил соединитель MySQL .Net и в обозревателе сервера я смог просмотретьтаблицы в этой БД.Я также удостоверился, что БД на сервере допускают удаленные подключения.

Я создаю и запускаю код локально через VS2010, а БД MySQL находится на размещенном сервере.

Что мне делатьнужно сделать, чтобы этот пример MVC2 работал для MySQL?

Обновление:

Я играл с кодом, ожидая ответа, и я обновил ProductsControllerна следующее:

using MySql.Data.MySqlClient;
            string connString = "server=xx.xx.xxx.xxx;Database=db_SportsStore;User Id=dbUser;Pwd=xxxxxx;";
            var connection = new MySqlConnection(connString);

            productsRepository = new SportsStore.Domain.Concrete.SqlProductsRepository(connection);

Затем в хранилище:

public SqlProductsRepository(MySql.Data.MySqlClient.MySqlConnection connection)
{
    connection.Open();
    productsTable = (new DataContext(connection)).GetTable<Product>();
    connection.Close();
}

Теперь я получаю совершенно другую ошибку:

{"Выесть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с '[t0]. [ProductID], [t0]. [Name], [t0]. [Description],[t0]. [Price], [t0]. [Category] 'в строке 1 "}

Я также должен упомянуть ... В этом примере используется LINQ to SQL.Я не уверен, имеет ли это значение или нет.Пожалуйста, сообщите.

1 Ответ

2 голосов
/ 30 апреля 2011

Несколько мыслей приходят на ум.

  1. Строка подключения, которую вы используете, является строкой подключения, если вы подключаетесь к БД SQL Server вместо строки подключения MySQL .Net Connector. Вам нужно изменить пример строки подключения из книги на то, что нужно MySQL. Например, MySQL не имеет опции Trusted Connection. (http://dev.mysql.com/doc/refman/5.1/en/connector-net-connection-options.html)
  2. В вашем SQLProductsRepository вам потребуется использовать объект MySQLConnection и т. Д. Вместо объекта SQLConnection, если он используется. Я думаю, что книга использовала Linq To SQL или Linq to Entity Framework. В любом случае вам придется изменить код для использования объектов MySQL ... или изменить модель, чтобы она попала в MySQL , если это Entity Framework. Если вы уже сделали это, то строка подключения в ней даст хорошее представление о том, что вам нужно в # 1.

http://dev.mysql.com/doc/refman/5.1/en/connector-net-tutorials-intro.html

РЕДАКТИРОВАТЬ - С вашим обновлением ...

Иногда MySQL не имеет такой же синтаксис, как SQL Server. Я предполагаю, что именно на это указывает эта ошибка.

В строке подключения MySQL Connector есть возможность использовать синтаксис SQL Server , называемый режимом SQL Server. Установите значение true и посмотрите, работает ли это ...

Что-то вроде:

Server=serverIP;Database=dbName;Uid=Username;Pwd=Password;SQL Server Mode=true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...