2014-12-25 83 views
0

我想知道为什么这段代码不起作用;它总是返回零(任何受影响的行)。该数据库是一个Access数据库。我可以插入和删除但不更新数据。它是一个Windows窗体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方法,我只填充参数和执行

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

我核实了所有参数,字段的名称和该命令没有错误执行,但总是返回零并执行的SqlCommand不更新数据库中的表。

我不能看到什么错在我的代码,但它doesn't工作。

任何人都可以打开我的眼睛?

+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]"; 

现在表被正确地更新。