【问题标题】:Keyword not supported: 'port' error in ASP.NET MVC application不支持关键字:ASP.NET MVC 应用程序中的“端口”错误
【发布时间】:2021-11-12 09:35:25
【问题描述】:

我正在尝试创建一个 API 服务器,并且我需要访问 MySQL 数据库。我有这段代码:

public static class Database
{
        private const string ConnectionString = "Server=localhost;Port=3306;Database=contoso_inc;Uid=root;Pwd=f6e527xp;";

        public static IEnumerable<User> Execute(string query)
        {
            using (var connection = new SqlConnection(ConnectionString))
            {
                var command = new SqlCommand(query, connection);
                connection.Open();
                
                var reader = command.ExecuteReader();
                var result = new List<User>();
                
                while (reader.Read())
                {
                    var user = new User
                    {
                        year = (uint) reader.GetValue(0),
                        month = (string) reader.GetValue(1),
                        users_num = (uint) reader.GetValue(2)
                    };
                    
                    result.Add(user);

                }
                
                reader.Close();

                return result;
            }
        }
}

错误出现在这一行:connection.Open();。所以显然我因为某种原因不能使用端口。有什么问题?

附:我看过相关的问题,但大多数属于实体框架主题。我这里没有DbContext,所以没有帮助。

【问题讨论】:

标签: c# mysql asp.net port ado


【解决方案1】:

端口在 Server 关键字中指定,在您的示例中使用:

"Server=localhost, 3306;Database=contoso_inc;Uid=root;Pwd=f6e527xp;"

连接字符串记录在这里:https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlconnection.connectionstring?view=dotnet-plat-ext-5.0

【讨论】:

  • 这是使用SqlConnection的正确语法,但是OP说他们想连接到MySQL;他们需要切换到 MySQL ADO.NET 库。
【解决方案2】:

查看SqlConnection.ConnectionString 的文档,我没有看到任何“端口”键的迹象。如果需要指定端口,可以在Server 部分进行:

要连接的 SQL Server 实例的名称或网络地址。服务器名后面可以指定端口号:

server=tcp:servername, portnumber

所以也许你想要:"Server=localhost,3306;..." 或 "Server=tcp:localhost,3306;..." - 如果你真的认为你真的需要指定端口的话。

【讨论】:

  • 这是使用 SqlConnection 的正确语法,但是 OP 说他们想连接到 MySQL,所以他们使用了错误的 ADO.NET 库。
  • @BradleyGrainger:天哪,我什至没有看到 - 我想知道它是在 5 分钟的宽限期内添加的(因此没有编辑),还是我没有发现它。
【解决方案3】:

我认为您使用了错误的连接驱动程序。 尝试安装这个 nuget 包

Install-Package MySql.Data -Version 8.0.26

那么,你可以这样做:

public static class Database
{
    private const string ConnectionString = "Server=localhost;Port=3306;Database=contoso_inc;Uid=root;Pwd=f6e527xp;";

    public static IEnumerable<User> Execute(string query)
    {
        using (var connection = new MySql.Data.MySqlClient.MySqlConnection(ConnectionString))
        {
            var command = new MySqlCommand(query, connection);
            connection.Open();
            
            var reader = command.ExecuteReader();
            var result = new List<User>();
            
            while (reader.Read())
            {
                var user = new User
                {
                    year = (uint) reader.GetValue(0),
                    month = (string) reader.GetValue(1),
                    users_num = (uint) reader.GetValue(2)
                };
                
                result.Add(user);

            }
            
            reader.Close();

            return result;
        }
    }
}

【讨论】:

    猜你喜欢
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多