使用 C# 的 mysql 存储过程中出错

本文关键字:存储过程 过程中 出错 存储 mysql 使用 | 更新日期: 2023-09-27 17:56:27

我想在mySql中使用一个存储过程,它必须返回identity_scope()。我试过这个,但不起作用:


CREATE DEFINER=`root`@`localhost` PROCEDURE `InsertVideo`(  
  OUT out_scope_id        INT,
    IN  in_youtubeidvideo       VARCHAR(15),
    IN  in_title                  VARCHAR(200),
    IN  in_rating           DOUBLE,
    IN  in_viewcount        INT
)
BEGIN 
     INSERT INTO Video 
     (                
       YoutubeIdVideo,      
       Title,               
       Rating,              
       ViewCount,                     
       DataAdded,
       ConvertedFlag
     )
     VALUES 
     (
       in_youtubeidvideo,                
       in_title,             
       in_rating,        
       in_viewcount,
       CURDATE(),
       false
     );
END

using (MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["AxWaveConnection"].ToString()))
            {
                try
                {
                    conn.Open();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                MySqlCommand cmd = new MySqlCommand("InsertVideo", conn);
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Parameters.Add("out_scope_id", scopeID);
                cmd.Parameters.Add(new MySqlParameter("in_youtubeidvideo", VideoId));
                cmd.Parameters.Add(new MySqlParameter("in_title", Title));
                cmd.Parameters.Add(new MySqlParameter("in_viewcount", ViewCount));
                cmd.Parameters.Add(new MySqlParameter("in_rating", Rating));
                cmd.Parameters["out_scope_id"].Direction = ParameterDirection.Output;

                try
                {
                    cmd.ExecuteNonQuery();
                    scopeID = Convert.ToInt32(cmd.Parameters["out_scope_id"].Value);
                }
                catch (Exception)
                {
                    scopeID = -1;        //Duplicate Record
                }

                conn.Close();
}

使用 C# 的 mysql 存储过程中出错

您忘记在 proc 中设置参数的值;存储 proc 的最后一行应如下所示:

select out_scope_id = LAST_INSERT_ID();

顺便说一句:SCOPE_IDENTITY()是一个MS SQL Server函数;而不是MySQL函数。

SELECT @@IDENTITY AS 'Identity';
GO