0

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();
}
4

2 に答える 2

2

proc でパラメーターの値を設定するのを忘れました。ストアド プロシージャの最後の行は次のようになります。

select out_scope_id = LAST_INSERT_ID();

ところで: SCOPE_IDENTITY() は MS SQL Server 関数です。MySQL 関数ではありません。

于 2013-01-28T18:31:21.257 に答える
0
SELECT @@IDENTITY AS 'Identity';
GO
于 2013-01-28T18:32:15.950 に答える