Команда Sql UPDATE не имеет никакого эффекта и не выдает ошибку только на веб-странице, тот же код в консольном проекте работает - PullRequest
1 голос
/ 02 ноября 2010

У меня есть веб-приложение .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();
    }

1 Ответ

2 голосов
/ 02 ноября 2010

Несколько мыслей, чтобы помочь с отладкой.

  1. Найдите все триггеры ОБНОВЛЕНИЯ (ПОСЛЕ или INSTEAD OF) в таблице VtelCenter, которые могут изменить ожидаемые результаты.
  2. Запустите трассировку SQL Profiler на сервере базы данных, чтобы вы могли зафиксировать запрос, передаваемый на этой стороне.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...