web-dev-qa-db-fra.com

Comment lier des paramètres via ODBC C #?

J'ai besoin de lier des paramètres sur ODBC requête de C #. Ceci est l'exemple de code, mais VS me dit qu'il manque un paramètre.

OdbcCommand cmd = conn.CreateCommand();

cmd.CommandText = "SELECT * FROM user WHERE id = @id";
cmd.Parameters.Add("@id", OdbcType.Int).Value = 4;
OdbcDataReader reader = cmd.ExecuteReader();

Quelle est la syntaxe pour lier des valeurs sur ODBC?

21
Emanuele Pavanello

Odbc ne peut pas utiliser de paramètres nommés. Cela signifie que la chaîne de commande utilise des espaces réservés pour chaque paramètre et cet espace réservé est un point d'interrogation unique, pas le nom du paramètre.

OdbcCommand.Parameters

Ensuite, vous devez ajouter les paramètres dans la collection dans le même ordre dans lequel ils apparaissent dans la chaîne de commande

OdbcCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT * FROM [user] WHERE id = ?";
cmd.Parameters.Add("@id", OdbcType.Int).Value = 4;
OdbcDataReader reader = cmd.ExecuteReader();

Vous avez également un autre problème, le mot UTILISATEUR est un mot clé réservé par base de données MS Access et si vous souhaitez l'utiliser comme nom de champ ou nom de table, il est nécessaire de placer chaque référence entre crochets. Je suggère fortement, si c'est possible, de changer le nom de cette table car vous serez très souvent confronté à ce problème.

40
Steve

utilisation "?" au lieu de @ si vous utilisez ODBC.

Essayez de procéder comme suit:

OdbcCommand cmd = conn.CreateCommand();

cmd.CommandText = "SELECT * FROM user WHERE id = ?";
cmd.Parameters.Add("@id", OdbcType.Int).Value = 4;
OdbcDataReader reader = cmd.ExecuteReader();
14
C Sharper

Pour utiliser ODBC comme LIKE paramétré, procédez comme suit, c'est-à-dire que vous n'utilisez pas les guillemets simples typiques ni même mettez le% dans le CommandText (En outre, je pense que peut-être le%? A une signification spéciale pour Oracle ?:

OdbcCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT * FROM [user] WHERE name LIKE ?";
cmd.Parameters.AddWithValue("@fieldName", OdbcType.NVarChar).Value = "%" + nameFilter + "%";
0
Paul Zahra