2010-11-08 16 views
0

Je crée une requête en utilisant l'objet de commande ODBC dans .Net avec plusieurs paramètres transmis. Lors de l'exécution de la requête sur SQL Anywhere, j'obtiens l'erreur suivante. (Le même code fonctionne avec SQL Server).Erreur de requête SQL Anywhere: valeurs insuffisantes pour les variables hôte

[System.Data.Odbc.OdbcException] = { "ERREUR [07002] [Sybase] [ODBC Driver] [SQL Anywhere] valeurs Pas assez pour les variables hôtes"}

L'objet de commande a le même nombre des paramètres ajoutés comme espaces réservés ('?') dans la requête. Voici une requête simple et un code C# qui échoue au test.

code C# pour alimenter les variables hôtes

Chaîne QUERYTEXT = @ "DECLARE @loanuseraddress varchar (40), @loanid décimal Set @loanid = Set @loanuseraddress = select * from loan_assignments où loan_id = @loanid "

 OdbcConnection connection = new OdbcConnection(request.ConnectionString); 
     OdbcCommand command;  

     command = new OdbcCommand(queryText, connection); 

     OdbcParameter param1 = new OdbcParameter("@loanid", OdbcType.Decimal); 
     param1.Value = request.Loan.LoanNumber; 
     command.Parameters.Add(param1); 

     OdbcParameter param2 = new OdbcParameter("@loanuseremployer", dbcType.VarChar); 
     param2.Value = appraisalCompanyUpdate.LoanUserEmployer; 
     if (param2.Value == null) 
      param2.Value = DBNull.Value; 
     command.Parameters.Add(param2); 


     connection.Open(); 
     OdbcDataReader rows = command.ExecuteReader(); 

Répondre

3

J'ai corrigé ce problème en recherchant les valeurs nulles. Lorsque vous essayez de passer un paramètre nul à Sybase, c'est l'erreur que vous obtenez (au moins pour moi). Avoir un sentiment LoanId est nul à un moment donné. Après avoir fait un peu plus de recherches, je pense que vous pouvez également obtenir cette erreur lorsque vous essayez plusieurs insertions/suppressions/mises à jour via la connexion ODBC Sybase dans .Net. Je ne pense pas que cela soit pris en charge et MSDN semble dire que c'est spécifique au fournisseur.

+0

Merci, c'était mon problème aussi :) – Carra

1

« L'insuffisance des variables hôtes » peut aussi vouloir dire autre chose, mais il est applicable à l'OP: l'une des autres causes pourrait être que vous avez un ensemble de variables déclarées différentes de l'ensemble de votre instruction SQL utilise.

E.g. cela pourrait être une faute de frappe, ou vous pourriez avoir copié en SQL à partir de Visual Studio qui a été utilisé pour remplir un tableau de données en utilisant des paramètres (comme :parm) mais en le faisant vous avez oublié de le déclarer (@parm) bloc d'extrémité.