2014-12-25 3 views
0

Интересно, почему этот код не работает; он всегда возвращает ноль (любая затронутая строка). База данных - это база данных Access. Я могу вставлять и удалять, но не обновлять данные. Это приложение Windows Forms C#.Команда обновления SQL всегда возвращается 0

 string sql = ""; 
     try 
     { 
      string[] parametrosNomes = new string[3]; 
      parametrosNomes[0] = "@CatId"; 
      parametrosNomes[1] = "@CatNome"; 
      parametrosNomes[2] = "@CatDescricao"; 

      object[] parametrosValores = new object[3]; 
      parametrosValores[0] = oCateg.categoriaid; 
      parametrosValores[1] = oCateg.categoriaNome; 
      parametrosValores[2] = oCateg.categoriaDescricao; 

      sql = "UPDATE Categorias SET categoriaNome = @CatNome, [email protected] Where [email protected]"; 
      int retorno = AcessoDB.CRUD(sql, parametrosNomes, parametrosValores); 
      return retorno; 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 

Примечание: В методе CRUD я только заполнение параметров и выполнения SqlCommand

int retorno = command.ExecuteNonQuery(); 
return retorno; 

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

Я не вижу ничего плохого в своем коде, но он не работает.

Может ли кто-нибудь открыть глаза?

+0

не уверен в доступе к базам данных .. строка подключения или что-то еще? Есть ли у него какие-либо записи, где categorialId = @ CatId? – CularBytes

+3

Вы когда-нибудь пробовали свой запрос в вашем менеджере баз данных, как SSMS? Обновляется ли там? Вы отлаживали свой код? Как выглядит ваш запрос при добавлении значений параметров? Что такое 'AcessoDB' и' CRUD'? Вы используете OleDb .Net Provider? Если вы используете OLE DB, он не поддерживает именованные параметры. Вам необходимо предоставить их в том же порядке, в котором вы добавите его в свою команду. –

+1

Опубликовать код для "AcessoDB.CRUD", и люди могут помочь вам. Наша способность отлаживать ваш код, читая ваши мысли по TCP/IP, отсутствует. – nvoigt

ответ

1

Попробуйте это. Параметры должны быть в той же последовательности, что и в sql. В самом sql вам нужно использовать '?'

string sql = ""; 
    try 
    { 
     string[] parametrosNomes = new string[3]; 
     parametrosNomes[0] = "@CatNome"; 
     parametrosNomes[1] = "@CatDescricao"; 
     parametrosNomes[2] = "@CatCatId"; 

     object[] parametrosValores = new object[3]; 
     parametrosValores[0] = oCateg.categoriaNome; 
     parametrosValores[1] = oCateg.categoriaDescricao; 
     parametrosValores[2] = oCateg.categoriaid; 

     sql = "UPDATE Categorias SET categoriaNome = ?, categoriaDescricao = ? Where categoriaId = ?"; 
     int retorno = AcessoDB.CRUD(sql, parametrosNomes, parametrosValores); 
     return retorno; 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
1

Я хотел бы поблагодарить всех за ответы.

Проблема решена: параметры не передаются в том порядке, в котором они используются.

Я просто исправить параметры заказа:

string[] parametrosNomes = new string[3]; 
parametrosNomes[0] = "@CatNome"; 
parametrosNomes[1] = "@CatDescricao"; 
parametrosNomes[2] = "@CatId"; 
object[] parametrosValores = new object[3]; 
parametrosValores[0] = oCateg.categoriaNome; 
parametrosValores[1] = oCateg.categoriaDescricao; 
parametrosValores[2] = oCateg.categoriaid; 
sql = "UPDATE Categorias SET categoriaNome = @CatNome, [email protected] Where [email protected]"; 

Теперь таблица обновляется правильно.

Смежные вопросы