[Erreur 1] SqlServer affiche une erreur : les variables scalaires OleDbException doivent être déclarées
Aujourd'hui, j'utilise .net pour faire fonctionner SqlServer à l'aide d'Oledb, mais il indique toujours "Une variable scalaire doit être déclarée..." inexplicablement. J'ai adopté les deux méthodes suivantes dans le code, mais en vain :
Méthode 1 : OleDbParameter[] p = new OleDbParameter[] {
nouveau OleDbParameter("@aa",1),
nouveau OleDbParameter("@bb","shelley"),
nouveau OleDbParameter("@cc",DateTime.Now)
} ;
Objcmd.Parameters.AddRange(p);
Méthode 2 : OleDbParameter pp ;
pp = new OleDbParameter("@aa",OleDbType.Integer);
pp.Valeur = 1 ;
Objcmd.Parameters.Add(pp);
pp = new OleDbParameter("@bb", OleDbType.LongVarChar);
pp.Value = "shelley";
Objcmd.Parameters.Add(pp);
pp = new OleDbParameter("@cc", OleDbType.Date);
pp.Value = DateTime.Now ;
Objcmd.Parameters.Add(pp); Peu importe la façon dont vous l'écrivez, il vous demandera "La variable scalaire @aa doit être déclarée". La raison finale est la phrase suivante : OleDbCommand Objcmd = new OleDbCommand("insert into test (a, b,c) valeurs (@aa,@bb,@cc)", Objconn);Écriture correcte : OleDbCommand Objcmd = new OleDbCommand("insérer dans le test (a,b,c)valeurs(?,?,?)", Objconn);De cette façon, ça s'est passé normalement. [Erreur 2] Sybase affiche une erreur : Cette interface n'est pas prise en charge (l'exception vient de HRESULT : 0x80004002 (E_NOINTERFACE)).net utilise Oledb pour faire fonctionner Sybase car le même paramètre peut être utilisé plusieurs fois dans une instruction SQL. Le code est. comme suit:
OleDbCommand Objcmd = new OleDbCommand("mettre à jour l'ensemble de tests a=@aa où a=@aa ", Objconn);
OleDbParameter[] p = nouveau OleDbParameter[] {
nouveau OleDbParameter("aa",1),
nouveau paramètre OleDb("aa",1)
} ;
Objcmd.Parameters.AddRange(p);
Objconn.Open();
Objcmd.ExecuteNonQuery();
Objconn.Close(); Le code ci-dessus affichera l'erreur « Cette interface n'est pas prise en charge (l'exception vient de HRESULT : 0x80004002 (E_NOINTERFACE)) ». La cause du problème est qu'il y a deux noms identiques dans les paramètres. Dans ce cas, vous n'avez besoin d'écrire qu'un seul paramètre. Les modifications sont les suivantes :
OleDbCommand Objcmd = new OleDbCommand("mettre à jour l'ensemble de tests a=@aa où a=@aa ", Objconn);
OleDbParameter[] p = nouveau OleDbParameter[] {
nouveau paramètre OleDb("aa",1)
};ou
OleDbCommand Objcmd = new OleDbCommand("mettre à jour l'ensemble de tests a=@aa où a=@aa2 ", Objconn);
OleDbParameter[] p = nouveau OleDbParameter[] {
nouveau OleDbParameter("aa",1),
nouveau paramètre OleDb("aa2",1)
};【Résumer】
Si vous écrivez un programme devant prendre en charge SqlServer et Sybase, vous devez accorder une attention particulière à ce point :
1.SqlServer doit utiliser "?" comme espace réservé de paramètre, ce qui nécessite que même si le même paramètre est utilisé, le paramètre doit être ajouté plusieurs fois ;
2. Si Sybase utilise le même paramètre plusieurs fois, le paramètre ne peut pas être ajouté plusieurs fois, sinon une erreur sera signalée ;
http://www.cnblogs.com/shelley/archive/2010/05/25/1743438.html