DELIMITER $$
USE `edt_date`$$
DROP PROCEDURE IF EXISTS `tb_ad_item_ADD`$$
CREATE PROCEDURE `tb_ad_item_ADD`(p_Title VARCHAR(128),
p_Href VARCHAR(128),
p_Status INT,
p_HitCount INT,
p_StartTime DATETIME,
p_EndTime DATETIME,
p_IsDel BIT,
OUT p_Out_Id INT
)
BEGIN
-- 添加一个广告,并且返回新增加的广告的ID
INSERT INTO `tb_ad_item` (`Title`,`Href`,`Status`,`HitCount`,`StartTime`,`EndTime`,`IsDel`)
VALUES(p_Title,p_Href,p_Status,p_HitCount,p_StartTime,p_EndTime,p_IsDel);
SET p_Out_Id = LAST_INSERT_ID();
END$$
DELIMITER ;
在asp.net里面的代码如下,在.net里面的 参数的顺序,一定要和mysql存储过程里面的顺序一模一样,不能像 mssql那样随便写。
mysql里面的参数是 ? 来表示,而mssql 是 @ 来表示,如果是有返回值,则一定是要在存储过程执行完毕之后,才能获取到值
/// <summary>增加一条数据,并返回刚才增加的数据的Id
///
/// </summary>
public bool Add(EDT.Model.Item model, out int id)
{
int rowsAffected;
MySqlParameter[] parameters = {
new MySqlParameter("?p_Title", MySqlDbType.VarChar,128),
new MySqlParameter("?p_Href", MySqlDbType.VarChar,128),
new MySqlParameter("?p_Status", MySqlDbType.Int32,11),
new MySqlParameter("?p_HitCount", MySqlDbType.Int32,11),
new MySqlParameter("?p_StartTime", MySqlDbType.Datetime),
new MySqlParameter("?p_EndTime", MySqlDbType.Datetime),
new MySqlParameter("?p_IsDel", MySqlDbType.Bit),
new MySqlParameter("?p_Out_Id", MySqlDbType.Int32)};
parameters[0].Value = model.Title;
parameters[1].Value = model.Href;
parameters[2].Value = model.Status;
parameters[3].Value = model.HitCount;
parameters[4].Value = model.StartTime;
parameters[5].Value = model.EndTime;
parameters[6].Value = model.IsDel;
parameters[7].Direction = ParameterDirection.Output; //表示这个参数是返回值
rowsAffected = MySQLHelper.ExecuteNonQuery("tb_ad_item_ADD", CommandType.StoredProcedure, parameters);
id = Convert.ToInt32(parameters[7].Value);//如果是有返回值,则一定是要在存储过程执行完毕之后,才能获取到值
return rowsAffected > 0 ? true : false;
}