我正在尝试创建一个方法,我可以在其中执行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()
时,方法会出现故障。我怎样才能使用这种方法?
答案 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:你需要更多地调整它以提高效率,因为我提供了一些基本的想法,我们如何用参数
来做到这一点