У меня есть веб-приложение .NET 3.5, в котором есть набор классов, обрабатывающих постоянство сущностей.Подготовленные команды INSERT и SELECT работают.Однако команда UPDATE никогда не работает (запись базы данных не обновляется) и никогда не вызывает исключение.Кроме того, он всегда возвращает 1, поэтому даже команда .ExecuteNonQuery () возвращает действительное число затронутых строк.
Теперь, когда я беру один и тот же класс сущностей и запускаю его в тестовом консольном приложении, подготовленный оператор работает.
Это действительно расстраивает и полностью останавливает шоу.Я даже пробовал это в Mono на Ubuntu, Mac OS X и Windows.Все они выполняются одинаково (в веб-приложении не обновляются записи, не работает вставка и не работает консольное приложение).
public void Store()
{
SqlConnection conn = new SqlConnection(this.connection_string);
conn.Open();
SqlCommand cmd = conn.CreateCommand();
int i = 0;
if (this.id == 0)
{
// INSERT a new RECORD
cmd.CommandText = "INSERT INTO [VtelCenter] ([CommonName],[Location]) VALUES (@commonname, " +
"@location)";
cmd.Parameters.Add("@commonname", SqlDbType.NVarChar, this.CommonName.Length);
cmd.Parameters["@commonname"].Value = this.CommonName;
cmd.Parameters.Add("@location", SqlDbType.NVarChar, this.Location.Length);
cmd.Parameters["@location"].Value = this.Location;
}
else
{
// UPDATE an existing RECORD
cmd.CommandText = "UPDATE [VtelCenter] SET [CommonName] = @commonname, [Location] = @location, " +
"[Status] = @status WHERE [ID] = @id";
//cmd.CommandText = "EXEC [dbo].[UpdateVtelCenter] @id, @commonname, @location, @status";
cmd.Parameters.Add("@commonname", SqlDbType.NVarChar, this.commonName.Length);
cmd.Parameters["@commonname"].Value = this.CommonName;
cmd.Parameters.Add("@location", SqlDbType.NVarChar, this.Location.Length);
cmd.Parameters["@location"].Value = this.Location;
cmd.Parameters.Add("@status", SqlDbType.Int);
cmd.Parameters["@status"].Value = (int) this.Status;
cmd.Parameters.Add("@id", SqlDbType.Int);
cmd.Parameters["@id"].Value = this.Id;
}
cmd.Prepare();
i = cmd.ExecuteNonQuery();
if (i != 1)
throw new Exception(string.Format("Incorrect number of records stored: {0}, should be 1.", i));
conn.Close();
}