Gross_Jiang
2019-04-02 02:39C# 使用Mysql.Data 构造参数化查询,设置出参被设置为NULL报错
5在C#中使用MySql.Data执行一个Insert语句,获取新增的自增主键。
使用的commandText如下:
INSERT T_Test_Table
(
Name
)
VALUES
(
@Name -- Name - nvarchar(50)
);SET @Id = @@IDENTITY
该语句在Mysql中无论是用存储过程执行,还是直接输入参数执行,都不会报错;
在C#程序中。
设置参数化属性如下:
MySqlParameter mpName = new MySqlParameter("Name",MySqlDbType.Varchar,50,"Test");
mpName.Direction = ParameterDirection.Input;
MySqlParameter mpId = new MySqlParameter("Id",MySqlDbType.Int32);
mpId.Direction = ParameterDirection.OutPut;
代码执行后报错:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL = @@IDENTITY' at line 1
这里不知道为什么:
SET @Id = @@IDENTITY 中 @Id被替换为 NULL;
由于未写事务的缘故,查询数据库发现数据已新增成功。
这是什么问题?应该怎么解决?求解。
数据库结构如下:
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for t_test_table
-- ----------------------------
DROP TABLE IF EXISTS `t_test_table`;
CREATE TABLE `t_test_table` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM AUTO_INCREMENT=73 DEFAULT CHARSET=utf8mb4;
附完整代码:
public static void Test()
{
try
{
string connetStr = "data source=127.0.0.1;database=Test; uid=root;pwd=root;Allow User Variables=True;";
MySqlConnection conn = new MySqlConnection(connetStr);
conn.Open();
string sql =
@"INSERT T_Test_Table
(
Name
)
VALUES
(
@Name -- Name - nvarchar(50)
);
SET @Id = @@IDENTITY";//在sql语句中定义parameter,然后再给parameter赋值
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlParameter mpName = new MySqlParameter("Name", MySqlDbType.VarChar, 50);
mpName.Value = "Tests";
mpName.Direction = ParameterDirection.Input;
MySqlParameter mpId = new MySqlParameter("Id", MySqlDbType.Int32);
mpId.Direction = ParameterDirection.Output;
cmd.Parameters.Add(mpName);
cmd.Parameters.Add(mpId);
int iRes = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
conn.Close();
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
throw new Exception("Mysql执行出错:\r\n" + ex.Message, ex);
}
}
- 点赞
- 回答
- 收藏
- 复制链接分享
1条回答
为你推荐
- c#使用sql语句模糊查询like后传参数查询结果为空,求大佬指点
- sql
- 1个回答
- .net 4.0 项目 连接mysql8.0.15 使用MySql.Data.dll 连接的时候报错
- c#
- visual studio
- asp.net
- 2个回答
- C#插入mysql显示插入成功,但无法查询到数据
- mysql
- c#
- 2个回答
- Asp.Net Core使用System.Drawing.Common部署到CentOs报错问题
- centos
- c#
- asp.net
- 1个回答
- C# Elasticsearch空值查询 不是NULL
- elasticsearch
- c#
- 6个回答
换一换