J'écris un petit framework en C# pour importer des données vers SQL Server.C# - SQL Server -? Oledb
J'ai remarqué que si vous essayez d'utiliser le? espace réservé pour les paramètres, ils ne fonctionnent pas si vous utilisez l'espace de noms System.Data.SqlClient. Toutefois, si vous utilisez l'espace de noms System.Data.OleDb pour travailler avec la base de données, ils fonctionnent très bien. (il vous suffit d'ajouter Provider = SQLOLEDB dans votre chaîne de connexion)
Donc j'ai quelques questions, parce que le? la syntaxe est requise par ma solution:
- Existe-t-il une alternative à l'utilisation de paramètres nommés avec System.Data.SqlClient? Je veux utiliser des paramètres ordonnés.
- Y a-t-il un impact sur les performances de l'utilisation d'un espace de noms (fournisseur ado) par rapport à l'autre?
- Y a-t-il une autre raison pour laquelle je préférerais un espace de noms plutôt qu'un autre?
Pour élaborer ce que je suis en train de faire, mon cadre va prendre une classe décorée avec des attributs personnalisés et générer des requêtes SQL comme ceci:
INSERT INTO myTable (col1, col2, ...) VALUES (?, ?, ...)
Cette chaîne sera créée avec un IDbCommand et plusieurs IDataParameters et pour chaque ExecuteNonQuery il va simplement définir les valeurs sur les IDataParameters.
Des pensées? Edit: J'ai essayé d'utiliser des paramètres nommés comme p0, p1, etc. comme répondeur mentionné et ça marche plutôt bien sur SqlClient. Toutefois, si j'utilise OleDB, il erreur en disant:
"Must declare the scalar variable @p0."
Mon paramètre est créé comme ceci:
new OleDbParameter("p" + index, GetType(attribute));
//GetType does work to get the correct SqlDbType
Quel est le problème? J'ai également essayé d'ajouter et de supprimer le symbole @ dans le nom du paramètre en vain.
FINAL EDIT: Je viens d'utiliser Oledb? et SqlClient utilise des paramètres nommés. Je peux changer de fournisseur pour de nouveaux fournisseurs.
L'utilisation de paramètres nommés est légèrement plus compliquée pour certaines choses que je fais. Je souhaite éventuellement que mon framework fonctionne pour d'autres fournisseurs tels que Oledb (Excel ou Access), MySQL, etc. Est-ce que OleDb a des paramètres nommés? – jonathanpeppers
Je suis d'accord avec tout ce qui précède (et lorsque j'utilise OLEDB j'utilise des params nommés de toute façon pour plus de clarté même si c'est seulement la position qui compte). – Murph
@Jonathan - oui, comme je l'ai dit, vous pouvez utiliser des paramètres nommés dans OLE DB, c'est juste que la seule chose qui importe réellement est la position – Murph