我正在尝试以编程方式将中型(434MB的原始转储)表从远程服务器复制到本地服务器。我当前的方法使用MySqlDataAdapter和DataSet:
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");
}
在致电System.IndexOutOfRangeException
Index was outside the bounds of the array
消息insertcommand.ExecuteNonQuery();
答案 0 :(得分:0)
当我尝试在没有Geometry数据的情况下执行INSERT时,它确实有效。
我尝试将MySqlDbType.Geometry
更改为MySqlDbType.Blob
,因为Geometry对象基本上是BLOB的一个特殊子集,这解决了这个问题。 MySqlDbType.Geometry
可能存在一些问题。