MVC2和mySQL数据库

时间:2011-04-30 17:13:44

标签: mysql linq-to-sql asp.net-mvc-2

我正在关注ASP.NET MVC 2框架书(Steven Sanderson)中的示例,除了使用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连接器,在Server Explorer中我可以查看该数据库上的表。我还确保服务器上的DB允许远程连接。

我通过VS2010在本地创建和运行代码,MySQL DB在托管服务器上。

如何让这个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]附近使用正确的语法。 [名称],[t0]。[说明],[t0]。[价格],[t0]。[类别]'在第1行“}

我还应该提一下......这个例子是使用LINQ to SQL。我不确定这是否重要。请指教。

1 个答案:

答案 0 :(得分:2)

想到了几个想法。

  1. 如果要连接到SQL Server DB而不是MySQL .Net Connector连接字符串,则使用的连接字符串是连接字符串。您将不得不将书中的连接字符串示例更改为MySQL所需的内容。例如,MySQL没有“可信连接”选项。 (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 ...对象或modify the model to hit your MySQL(如果它是实体框架)。如果您已经这样做了,那么其中的连接字符串将很好地了解您在#1中的需求。
  3. http://dev.mysql.com/doc/refman/5.1/en/connector-net-tutorials-intro.html

    编辑 - 随你的更新......

    MySQL有时没有与SQL Server相同的语法。我假设这是错误所指向的。

    在MySQL Connector连接字符串上,它有an option to use SQL Server Syntax称为SQL Server模式。将此设置为true,看看是否有效....

    类似的东西:

    Server=serverIP;Database=dbName;Uid=Username;Pwd=Password;SQL Server Mode=true;