gpt4 book ai didi

MySqlHelper 未将查询参数推送到 MySQL

转载 作者:行者123 更新时间:2023-11-29 23:48:45 25 4
gpt4 key购买 nike

我有一个 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。

我不知道我哪里出了问题。有任何想法吗?谢谢...

最佳答案

我尝试过与您类似的代码,经过一些小的更改后它可以按预期工作

首先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# 代码中似乎需要 @ 前缀

关于MySqlHelper 未将查询参数推送到 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25774500/

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