gpt4 book ai didi

c# - 使用 MySqlCommand.ExecuteNonQuery 将几何数据插入表中

转载 作者:行者123 更新时间:2023-11-29 22:28:07 25 4
gpt4 key购买 nike

我正在尝试以编程方式将中等大小(434MB 的原始转储)表从远程服务器复制到本地服务器。我当前的方法使用 MySqlDataAdapter 和 DataSets:

        using(MySqlConnection conn_local = new MySqlConnection(localcs))
{
conn_local.Open();
//build an insertcommand
MySqlCommand insertcommand = new MySqlCommand("INSERT INTO `buildtools`.`straten` (straat, a_naam, e_naam, n_naam, plaats, opr_id, wegtype, wegtype_b, wegtype_a, wegtype_p, rotonde, opaf, opaf_naam, hoogtenummer, knooppunt, rijrichting, eenrichting, regio, layerNr, geom) VALUES (@straat, @a_naam, @e_naam, @n_naam, @plaats, @opr_id, @wegtype, @wegtype_b, @wegtype_a, @wegtype_p, @rotonde, @opaf, @opaf_naam, @hoogtenummer, @knooppunt, @rijrichting, @eenrichting, @regio, @layerNr, @geom);", conn_local);

//addparameters is a static function to add the necessary parameters to insertcommand
foreach(some datastructure in some dataset)
{
addparameters(insertcommand);
//Do some work to set parameter values
insertcommand.ExecuteNonQuery();
insertcommand.Parameters.Clear;
}

}

addparameters 函数如下所示:

private static void addparameters(MySqlCommand cmd)
{
cmd.Parameters.Add("@straat", MySqlDbType.VarChar, 60, "straat");
cmd.Parameters.Add("@a_naam", MySqlDbType.VarChar, 60, "a_naam");
cmd.Parameters.Add("@e_naam", MySqlDbType.VarChar, 20, "e_naam");
cmd.Parameters.Add("@n_naam", MySqlDbType.VarChar, 20, "n_naam");
cmd.Parameters.Add("@plaats", MySqlDbType.VarChar, 40, "plaats");
cmd.Parameters.Add("@opr_id", MySqlDbType.Decimal, 16, "opr_id");
cmd.Parameters.Add("@wegtype", MySqlDbType.VarChar, 20, "wegtype");
cmd.Parameters.Add("@wegtype_b", MySqlDbType.VarChar, 20, "wegtype_b");
cmd.Parameters.Add("@wegtype_a", MySqlDbType.VarChar, 20, "wegtype_a");
cmd.Parameters.Add("@wegtype_p", MySqlDbType.VarChar, 20, "wegtype_p");
cmd.Parameters.Add("@rotonde", MySqlDbType.VarChar, 20, "rotonde");
cmd.Parameters.Add("@opaf", MySqlDbType.VarChar, 20, "opaf");
cmd.Parameters.Add("@opaf_naam", MySqlDbType.VarChar, 45, "opaf_naam");
cmd.Parameters.Add("@hoogtenummer", MySqlDbType.Int16, 6, "hoogtenummer");
cmd.Parameters.Add("@knooppunt", MySqlDbType.VarChar, 45, "knooppunt");
cmd.Parameters.Add("@rijrichting", MySqlDbType.VarChar, 1, "rijrichting");
cmd.Parameters.Add("@eenrichting", MySqlDbType.VarChar, 1, "eenrichting");
cmd.Parameters.Add("@regio", MySqlDbType.VarChar, 30, "regio");
cmd.Parameters.Add("@layerNr", MySqlDbType.VarChar, 45, "layerNr");
cmd.Parameters.Add("@geom", MySqlDbType.Geometry, 1, "geom");
}

在调用 insertcommand.ExecuteNonQuery();< 时,我不断收到 System.IndexOutOfRangeException 消息,其中包含消息 Index was Outside of the array/p>

最佳答案

当我尝试在没有几何数据的情况下执行插入时,它确实有效。

我尝试将 MySqlDbType.Geometry 更改为 MySqlDbType.Blob 因为 Geometry 对象基本上是 BLOB 的特殊子集,这解决了问题。 MySqlDbType.Geometry 可能存在一些问题。

关于c# - 使用 MySqlCommand.ExecuteNonQuery 将几何数据插入表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30074750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com