2012-01-24 3 views
2

Я пытаюсь обновить мою базу данных с помощью команд SQL, но она не работает.Обновление SQL не работает

id = primarykey 

public void updateName(int id, string name) 
{ 
    using(var cmd = new SqlCommand("UPDATE person SET name = @name where id = @id", connect())) 
    { 
     cmd.Parameters.AddWithValue("@id", id); 
     cmd.Parameters.AddWithValue("@name",name); 
     cmd.ExecuteNonQuery(); 
    } 
} 

private SqlConnection connect() 
{ 
    string conStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
    var c = new SqlConnection(conStr); 
    c.Open(); 
    return c; 
} 

Что я пропустил?

+5

Что 'подключения() 'делать? Какую ошибку или исключение вы получаете? – Yuck

+0

connect = где я храню свою строку соединения. И я не получаю никаких ошибок. Это не обновление моей записи. – dumbel

+1

Можете ли вы запустить команду в SSMS? Вероятно, запись, которую вы пытаетесь обновить, не существует. SQL Server не просто игнорирует ваши команды - он либо делает то, что вы ему рассказываете, либо жалуется, что он не может. – Yuck

ответ

2

Вы должны изменить порядок добавления параметров - у большинства поставщиков это имеет значение.

Так оно и должно быть не

cmd.Parameters.AddWithValue("@id", id); 
    cmd.Parameters.AddWithValue("@name",name); 

а

cmd.Parameters.AddWithValue("@name",name); 
    cmd.Parameters.AddWithValue("@id", id); 

Общее правило: порядок вызовов cmd.Parameters.AddWithValue должны быть такими же, как и порядок параметров встречаемости в запросе.

+2

Для ADO .NET заказ делает ** не ** вопрос. – Yuck

+0

-1 Не всегда правильно ... –

+0

По-прежнему то же, im not gettng любая ошибка, поэтому кажется, что я обновляю другую базу данных, если это возможно? – dumbel

2
  • Смотрите, если DB подключения является правильным DB, а не тест или что-то, и то же самое для сервера
  • Переписать запрос в

    UPDATE person SET name = @name where id = @id; 
    IF @@ROWCOUNT = 0 
        RAISERROR('No rows updated', 16,1) 
    
  • проверки, есть ли существует какой-то пустой try ... catch{} в стеке вызовов

  • увидеть, если существует других person таблиц в разных схемах
  • увидеть, если есть триггер на столе и что она делает
  • увидеть, если какие-либо другие процессы меняют ту же таблицу
  • увидеть, если приложение попадает этот код при запуске