远程服务器声明表不存在

时间:2016-01-06 20:29:21

标签: c# mysql .net asp.net-mvc entity-framework

我的配置文件中有一个连接字符串,如此

  

添加名称="实体" connectionString =" Data Source = localhost; user id = username; password = somepassword; persist security info = True; database = dbname"的providerName =" MySql.Data.MySqlClient"

适用于localhost。

我将数据源更改为数据源= 123.34.45.56< - 某些远程服务器

我认为MySql.Data.MySqlClient.MySqlException: Table 'mydb.Emails'不存在

如果我在c#中使用连接代码,它将对远程服务器起作用:下面的示例

MySql.Data.MySqlClient.MySqlConnection mySqlConnection = new 
MySql.Data.MySqlClient.MySqlConnection();
mySqlConnection.ConnectionString = "Data Source=123.34.45.56;user id=username;password=somepassword;persist security info=True;database=dbname";


string conString = mySqlConnection.ConnectionString;
using (MySqlConnection connection = new MySqlConnection(conString)) {
    connection.Open();

    using (MySqlCommand command = new MySqlCommand(
    "SELECT * FROM emails",
    connection)) {

        using (MySqlDataReader reader = command.ExecuteReader()) {
            while (reader.Read()) {
                for (int i = 0; i < reader.FieldCount; i++) {
                    var tr = reader.GetValue(i);  
                }

            }
        }
    }
} 

为什么web.config中的连接字符串会为每个表MySql.Data.MySqlClient.MySqlException: Table 'mydb.Emails'抛出此错误。

这些表就在那里,因为c#连接代码可以打开连接并查询数据就好了。

如何让连接字符串生效?

2 个答案:

答案 0 :(得分:3)

John Garrard是对的。这是一个区分大小写的问题,数据库位于两个不同的操作系统上。我需要使我的实体区分大小写,并且切换连接字符串将在Windows开发机器和Linux生产机器之间工作。感谢。

答案 1 :(得分:0)

从Windows开发人员迁移到AWS测试系统时遇到了这个问题。有一个名为“ lower_case_table_names”的参数,用于控制MySql如何匹配表名,该表名在Linux上默认为0,在Windows上默认为1(表示区分大小写和不区分大小写):

  • 在您的AWS控制台上,转到RDS页面。
  • 单击参数组。
  • 创建您自己的文件或单击进入默认参数组。
  • 搜索参数lower_case_table_names。
  • 编辑值并将其设置为1
  • 保存参数并重新启动数据库实例。