0

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()、メソッドは誤動作します。このメソッドを機能させるにはどうすればよいですか?

4

1 に答える 1

0

OUTPUT パラメータを使用しない理由は、最後に挿入された ID を返すことです。 SqlParamet

LastInsertID がいつ生成されるかがわかっている場合は、メソッドにもう 1 つのパラメーターを渡して、insertID を取得していることを伝え、そのパラメーターに基づいて次のようなことを行うことができます。

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 : パラメータなしでそれを行う方法についていくつかの基本的なアイデアを示したので、効率を高めるためにもう少し調整する必要があります

于 2012-04-01T11:55:39.997 に答える