【发布时间】:2015-08-15 13:31:10
【问题描述】:
我有一个 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 Workbench 执行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 连接器似乎出于某种原因将其转换为字节数组。我发现了一个关于这个here 的类似问题。但是,这个问题没有回应,就像6岁一样。如果它是一个错误,那么现在肯定已经修复了。
有人有解决办法吗?
【问题讨论】: