. net连接器返回字节数组而不是实际类型

本文关键字:类型 数组 连接器 返回 字节 字节数 net | 更新日期: 2023-09-27 17:52:36

我有一个MySql数据库,其中一个字段是GEOMETRY字段。我正在使用ADO。Net连接到数据库,我正在像这样将数据写入字段:

var myGeometry = new MySql.Data.Types.MySqlGeometry(15.3f, 12.9f);
string cmdString = "INSERT INTO `MyTable` (LaunchPoint) VALUES (@val1);";
using (var connection = new MySqlConnection(_connectionString))
{
    using (var command = new MySqlCommand())
    {
        command.Connection = connection;
        command.CommandType = CommandType.Text;
        command.CommandText = cmdString;
        command.Parameters.Add(new MySqlParameters("@val1", MySqlDbType.Geometry) {Value = myGeometry});
        connection.Open();
        command.ExecuteScalar();
    }
}

工作正常。它将数据写入数据库,如果我从MySQL工作台执行SELECT命令,我可以看到数据在那里。

我遇到的问题是读回数据。数据返回为byte[]而不是MySqlGeometry对象。下面是我的读取代码:

string sql = "SELECT * FROM MyTable";
using (var connection = new MySqlConnection(_connectionString))
{
    using (var command = new MySqlCommand())
    {
        command.Connection = connection;
        command.CommandType = CommandType.Text;
        command.CommandTet = sql;
        connection.Open();
        using (var adapter = new MySqlDataAdapter())
        {
            using (var ds = new DataSet())
            {
                adapter.SelectCommand = command;
                adapter.Fill(ds);
                // Error occurs on the next line
                var geo = (MySqlGeometry) ds.Tables[0].Rows[0]["LaunchPoint"];
            }
        }
    }
}

当我尝试用数据加载geo变量时发生错误。错误告诉我它不能将字节数组转换为MySqlGeometry。仔细一看,它确实看起来像是MySQL . net连接器出于某种原因将其转换为字节数组。我在这里发现了一个类似的问题。然而,这个问题没有回应,它就像6年前一样。如果这是一个bug,现在肯定已经修复了。

有人有解决这个问题的方法吗?

. net连接器返回字节数组而不是实际类型

不是强制类型转换,而是使用字节数组构造函数新建对象的新实例。

public MySqlGeometry(MySqlDbType type, byte[] val)

来源
var geo = new MySqlGeometry(MySqlDbType.Geometry, ds.Tables[0].Rows[0]["LaunchPoint"]);