我有一个WPF / .Net 4.5 C#应用程序,我正在使用MySQL NET Connector 6.8.3。我试图在MySQL数据库中执行存储过程,这需要3个参数。
表格如下:
CREATE TABLE `geofences` (
`id_geofences` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) NOT NULL,
`description` varchar(255) DEFAULT NULL,
`type_id` int(11) NOT NULL,
`shape_id` int(11) NOT NULL,
PRIMARY KEY (`id_geofences`),
UNIQUE KEY `id_geofences_UNIQUE` (`id_geofences`),
UNIQUE KEY `name_UNIQUE` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
存储过程如下:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_geofence`(geofenceName VARCHAR(45), geofenceDescription VARCHAR(255), typeId INT, shapeId INT)
BEGIN
INSERT INTO geofences (`name`, `description`, `type_id`, `shape_id`) VALUES (@geofenceName, @geofenceDescription, @typeId, @shapeId);
END
这是我的C#代码:
string sql = "call insert_geofence (@geofenceName, @geofenceDescription, @typeId, @shapeId);";
MySqlParameter[] parameters = new MySqlParameter[4];
parameters[0] = new MySqlParameter("@geofenceName", "test name");
parameters[1] = new MySqlParameter("@geofenceDescription", "test description");
parameters[2] = new MySqlParameter("@typeId", 1);
parameters[3] = new MySqlParameter("@shapeId", 2);
MySql.Data.MySqlClient.MySqlHelper.ExecuteNonQuery(ConnectionString, sql, parameters);
但我收到以下错误:
"Column 'name' cannot be null"
我已将列name
列为NOT NULL列。因此,看起来参数的值不会被发送到存储过程。实际上,如果我从name
列中删除NOT NULL限制,则执行查询,但所有四列都为NULL。
我无法弄清楚我哪里出错了。有任何想法吗?感谢...
答案 0 :(得分:0)
我已经尝试过类似的代码,并且经过一些小的改动后它可以正常工作
首先,SP是这样的:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_test`(n varchar(10), f varchar(255))
BEGIN
INSERT INTO filename (username, file) VALUES (n, f);
END
现在对SP的调用就像这样
string conn = "Server=localhost;Database=test;Uid=root;Pwd=root;Port=3306";
string cmdText = "call sp_test(@n, @f);";
MySqlParameter[] parameters = new MySqlParameter[2];
parameters[0] = new MySqlParameter("@n", "steve");
parameters[1] = new MySqlParameter("@f", @"d:\temp\test.txt");
MySql.Data.MySqlClient.MySqlHelper.ExecuteNonQuery(conn, cmdText, parameters);
使用相同的名称而不使用参数名称的前缀和Sql语句中的占位符非常重要。相反,似乎C#代码中需要@ prefix