远程服务器声明表没有';不存在

本文关键字:不存在 服务器 声明 | 更新日期: 2023-09-27 18:29:26

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

add name="entities"connectionString="Data Source=localhost;user id=username;password=somepassword;persistent 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#连接代码可以打开连接并查询数据。

如何使连接字符串工作?

远程服务器声明表没有';不存在

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

我在从Windows开发转移到AWS测试系统时遇到了这个问题。有一个名为"lower_case_table_names"的参数控制MySql如何匹配表名,在linux上默认为0,在Windows中默认为1(表示区分大小写和不区分大小写):

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