J'ai une application C++ se connectant à MS SQL Server 2005 en utilisant CDynamicAccessor. Lorsque ma colonne est text ou ntext, le CDynamicAccessor :: GetColumnType retourne toujours DBTYPE_IUNKNOWN. Je peux lier les données comme ISequentialStream et lire le flux d'octets. Cependant, comment puis-je savoir si la colonne que je suis en train de lire est text ou ntext, et donc interpréter le flux d'octets comme ASCII ou Unicode?Comment dire à une colonne est le texte ou ntext lors de la connexion à la base de données en utilisant CDynamicAccessor?
0
A
Répondre
0
La classe CDynamicAccessor remplace la valeur DBTYPE d'origine de la colonne par DBTYPE_UNKNOWN. Pour obtenir le DBTYPE d'origine, nous devons appeler la fonction GetColumnInfo. Un exemple de la façon de le faire est l'exemple d'application de DynamicConsumer inclus dans les échantillons Visual Studio 2008:
// the following case will handle BLOBs binded as ISequentialStream/IStream pointer
if(dbtype == DBTYPE_IUNKNOWN)
{
// first we have to determine what was the column's type originally reported by the provider
CComHeapPtr<DBCOLUMNINFO> spColumnInfo;
CComHeapPtr<OLECHAR> spStringsBuffer;
DBORDINAL nColumns = 0;
HRESULT hres = rs.CDynamicAccessor::GetColumnInfo(rs.m_spRowset, &nColumns, &spColumnInfo, &spStringsBuffer);
ATLASSERT(SUCCEEDED(hres));
ATLASSERT(col <= nColumns);
DBTYPE wType = spColumnInfo[col-1].wType;
...
}
La solution alternative consiste à définir le CDynamicAccessor à DBBLOBHANDLING_NOSTREAMS, qui semble rendre le code beaucoup moins compliqué à gérer les données chargement (vous pouvez le voir dans l'exemple de code VS2008 complet). Cependant, je ne suis pas sûr pourquoi l'utilisation de stream est l'option par défaut, et s'il y a des inconvénients à ne pas utiliser de flux.
Questions connexes
- 1. Longueur de données dans la colonne ntext?
- 2. Comment vérifier la connexion à la base de données rapidement?
- 3. comment établir la connexion à la base de données en utilisant WPF, C# et XAML
- 4. Aide à la connexion à la base de données
- 5. Mettre à jour une colonne NText
- 6. Assistant de connexion à la base de données SOAP UI
- 7. besoin d'aide avec la connexion à la base de données
- 8. AIR: Connexion à la base de données via le réseau?
- 9. Recherche de la colonne de base de données à laquelle est mappée la propriété d'une entité
- 10. Pool de connexion à la base de données JBoss
- 11. Quel est le moyen le plus rapide de charger une colonne text ou ntext SQL Server?
- 12. Connexion à une base de données en lecture seule
- 13. Problème lors de la lecture des données nchar à partir de la base de données Oracle
- 14. Connexion à une base de données depuis le début
- 15. Création d'une connexion avec la base de données à distance en utilisant Cocoa
- 16. Problème lors de la connexion à la base de données cloud
- 17. VS2008 perd la connexion à la base de données après les mises à jour en ssms2008
- 18. Connexion de la base de données à partir de l'applet
- 19. Comment implémenter le pool de connexion à la base de données en PHP?
- 20. Pour encapsuler la connexion à une base de données dans des objets métier ou non?
- 21. mod_rewrite, .htaccess connexion à la base de données mysql
- 22. connexion à distance de la base de données mysql en utilisant C# .net
- 23. java.sql.SQLException rencontré lors de la connexion à la base de données Oracle
- 24. Connexion à une base de données Oracle en C# .Net
- 25. Connexion à la base de données pooling et connection.close()
- 26. Php - Connexion à la base de données distante très lente
- 27. Quelle est la meilleure façon de dire à un framework quelle base de données utiliser?
- 28. Connexion manuelle à la base de données dans Asp.net MVC
- 29. Colonne endommagée dans la base de données
- 30. Django n'affiche pas le caractère de retour à la ligne lors du rendu du texte de la base de données