首页 > 解决方案 > 如何在没有 Web 服务的情况下将 Xamarin.Forms 应用程序连接到 mysql 数据库

问题描述

我需要开发一个跨平台应用程序以在内部网络中使用。该应用程序必须连接到该网络中的 MySQL 数据库。我必须在不接触网络上的任何服务器的情况下执行此操作(我无法在网络内设置 Web API)。我选择了 Xamarin.Forms 进行开发。

我搜索了将 MySQL 直接与 Xamarin.Forms 集成的方法,大多数人正确地推荐使用 Web API。不幸的是,在我的情况下这是不可能的。在 SO 上的一些答案中,我找到了 Nuget package Xamarin.MySql.Data

但是,当我将它添加到项目中时,构建失败并出现以下错误:

NU1202  Package Xamarin.MySql.Data 1.0.1 is not compatible with uap10.0.16299 (UAP,Version=v10.0.16299) / win10-arm. Package Xamarin.MySql.Data 1.0.1 supports:
  - monoandroid (MonoAndroid,Version=v0.0)
  - monotouch (MonoTouch,Version=v0.0)
  - xamarinios (Xamarin.iOS,Version=v0.0)

我知道这是一个兼容性问题。

还有哪些其他选择?谢谢。

标签: mysqlxamarin.forms

解决方案


根据 MySQL Connector for .NET 的官方文档,它可以在任何版本的 .NET 上运行,因此您应该能够从Xamarin.Forms应用程序中使用它。

MySQL Connector/NET 可在任何支持 .NET Standard(.NET Framework、.NET Core 和 Mono)的平台上运行(请参阅文档

您可以从 NuGet 安装连接器,然后开始使用它。

如果您习惯了 ADO.NET(或愿意学习它),那么您可以开始使用MySqlConnection该类。请参阅以下非常基本的示例

List<MyObject> result = new List<MyObject>();

using var connection = new MySqlConnection(connectionString); // C# 8!
connection.Open();

using var command = connection.CreateCommand();
command.CommandText = "SELECT id, name FROM fooBar WHERE deleted = 0"; // whatever

using var reader = command.ExecuteReader();
while(reader.Read())
{
    result.Add(new MyObject
                   {
                       Id = reader.GetUInt64("id"), // the parameter is the name of the column
                       Name = reader.GetString("name"),
                   });

}

return result;

(如果您不知道连接字符串的外观,请参阅此页面。请注意MySQL 实例必须可从应使用此连接的设备访问。)connectionString

如果您更喜欢使用 EF,则必须安装此 NuGet 包


推荐阅读