C#mysql一返回last_insert_id

时间:2012-04-01 11:21:16

标签: c# mysql methods last-insert-id

我正在尝试创建一个方法,我可以在其中执行mysql UPDATE,DELETE或INSERT查询。使用INSERT时,该方法必须有效,或者不询问last_insert_id()。以下是我目前的代码:

public int executeUID(MySqlCommand msCommand)
{
  try
  {
    this.Open();

    msCommand.Connection = this.msCon;

    return int.Parse(msCommand.ExecuteScalar().ToString());
  }
  catch (MySqlException ex)
  {
    throw ex;
  }
  finally
  {
    this.Close();
  }
}

问题在于,当我使用返回last_insert_id()的插入查询时,该方法非常有效。但是当查询未返回last_insert_id()时,方法会出现故障。我怎样才能使用这种方法?

1 个答案:

答案 0 :(得分:0)

为什么不使用OUTPUT参数,它将返回最后插入的id。 SqlParamet

如果您知道LastInsertID何时可以生成,那么您可以再向一个方法传递一个参数,告诉它正在重新执行insertedID,根据该参数可以做到这样的事情。

public int executeUID(MySqlCommand msCommand, bool Mode) //Mode==true means insertandRetriveLastID, false means =dont retrive last insertedit
{
  try
  {
    this.Open();

    msCommand.Connection = this.msCon;

    if(Mode)  //for getting last inserted id 
   {
      SqlParameter outParams= new SqlParameter("@ID", SqlDbType.Int);
      outParams.Direction =    ParameterDirection.Output;
      msCommand.Parameters.Add(outParams)
      msCommand.ExecuteNonQuery();
      var outputValue = cmd.Parameters["@ID"].Value;  
   }
    else //if no inserted id is not there 
    {
       return msComand.ExecuteNonQuery(); // it will return No of Rows Affected. 
    }

  }
  catch (MySqlException ex)
  {
    throw ex;
  }
  finally
  {
    this.Close();
  }
}

PS:你需要更多地调整它以提高效率,因为我提供了一些基本的想法,我们如何用参数

来做到这一点