c# - 如何在mysql中获得一个自动递增的存储过程
问题描述
我正在运行以下代码来调用 p_CreateRequest。我想要的只是找回 ID,但我得到一个字段“ID”没有默认值错误。帮助
using (var conn = Conn)
{
using (var cmd = new MySql.Data.MySqlClient.MySqlCommand("p_CreateRequest", conn))
{
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Add(new MySql.Data.MySqlClient.MySqlParameter("CREATED_DATE", cREATED_DATE));
cmd.Parameters.Add(new MySql.Data.MySqlClient.MySqlParameter("WORKFLOW_ID", wORKFLOW_ID));
cmd.Parameters.Add(new MySql.Data.MySqlClient.MySqlParameter("CREATED_BY_USER_ID", cREATED_BY_USER_ID));
cmd.Parameters.Add(new MySql.Data.MySqlClient.MySqlParameter("ID", iD));
cmd.Parameters["ID"].Direction = System.Data.ParameterDirection.Output;
cmd.ExecuteNonQuery();
iD = (int)cmd.Parameters["ID"].Value;
return iD;
}
}
存储过程代码是
CREATE DEFINER="finnsch"@"%" PROCEDURE "p_CreateRequest"(CREATED_DATE datetime,
WORKFLOW_ID int, CREATED_BY_USER_ID varchar(50),INOUT ID int)
BEGIN
DECLARE LASTCHANGEDATE Date;
SET LASTCHANGEDATE = Now();
INSERT INTO REQUEST
(CREATED_DATE,WORKFLOW_ID,CREATED_BY_USER_ID,
CURRENT_STEP_ID,LAST_ACTION_BY,LAST_EDIT_DATE)
select
CREATED_DATE,WORKFLOW_ID,CREATED_BY_USER_ID,s.ID,
CREATED_BY_USER_ID,LASTCHANGEDATE
from
STEP s where s.WORKFLOW_ID=WORKFLOW_ID and s.IS_INITIAL=1;
set ID = Last_Insert_ID();
END
解决方案
需要更改表并将ID设置为:
id int(20) NOT NULL AUTO_INCREMENT,
另外,检查 MySql 是否处于Strict SQL Mode。如果是,则需要运行查询:
SET GLOBAL sql_mode=''.
您还可以修改 my.cnf / my.ini 以确保您没有设置 STRICT_ALL_TABLES 和/或 STRICT_TRANS_TABLES。有关更多信息,请参见:
推荐阅读
- ios - HStack中项目的线性颜色渐变?
- sql - 在 VBA ADODB 连接之外测试 SQL
- roblox - Roblox studio,回合开始时无法将块放置在随机位置
- javascript - 高效的 VueJS 使用 UI 组件
- c# - 如何在 C# 中找到字节数组中的字符串?
- python - 与 Arduino 的 Python 串行通信,使用用户输入闪烁内置 LED,同时读取 Arduino 信号
- angular9 - angular6-social-login 不适合我
- hash - 散列实现工作非常缓慢
- c# - 以编程方式在任务栏中添加自定义文本
- javascript - 将新跨度插入现有跨度