public override void Execute() { if (!this.IsPrepared) { base.Execute(); } else { MySqlStream stream = new MySqlStream(base.Driver.Encoding); BitArray array = new BitArray(base.Parameters.Count); if (this.paramList != null) { for (int i = 0; i < this.paramList.Length; i++) { MySqlParameter parameter = base.Parameters[this.paramList[i].ColumnName]; if ((parameter.Value == DBNull.Value) || (parameter.Value == null)) { array[i] = true; } } } byte[] buffer = new byte[(base.Parameters.Count + 7) / 8]; if (buffer.Length > 0) { array.CopyTo(buffer, 0); } stream.WriteInteger((long)this.statementId, 4); stream.WriteByte(0); stream.WriteInteger(1L, 4); stream.Write(buffer); stream.WriteByte(1); if (this.paramList != null) { foreach (MySqlField field in this.paramList) { MySqlParameter parameter2 = base.Parameters[field.ColumnName]; stream.WriteInteger((long)parameter2.GetPSType(), 2); } foreach (MySqlField field2 in this.paramList) { int index = base.Parameters.IndexOf(field2.ColumnName); if (index == -1) { throw new MySqlException("Parameter '" + field2.ColumnName + "' is not defined."); } MySqlParameter parameter3 = base.Parameters[index]; if ((parameter3.Value != DBNull.Value) && (parameter3.Value != null)) { stream.Encoding = field2.Encoding; parameter3.Serialize(stream, true); } } } this.executionCount++; base.Driver.ExecuteStatement(stream.InternalBuffer.ToArray()); } }
private bool SerializeParameter(MySqlParameterCollection parameters, MySqlStream stream, string parmName) { MySqlParameter parameterFlexible = parameters.GetParameterFlexible(parmName, false); if (parameterFlexible == null) { if (!parmName.StartsWith("@") || !this.ShouldIgnoreMissingParameter(parmName)) { throw new MySqlException(string.Format(Resources.ParameterMustBeDefined, parmName)); } return(false); } parameterFlexible.Serialize(stream, false); return(true); }