2009-07-28 6 views
0

Je suis passé de LINQ à SQL à ADO.NET (avec MSSQL) en raison de a problem I described earlier, mais j'ai également rencontré un problème étrange en utilisant ADO.NET. J'importe des données à partir d'une feuille de calcul Excel en utilisant Excel interop et je place son contenu dans la base de données. Je coupe tout ce qui est inséré, donc ce n'est pas (supposé être) la source du problème. Lorsque j'examine le contenu de la table à l'aide de DataGridView, ce que je vois, c'est que chaque cellule a des charges d'espaces après le texte qu'elles contiennent. Capture d'écran ci-dessousADO.NET problème de remplissage de Whitespace

alt text http://shadow.crysis.hu/so_adonet_whitespaces.png

J'utilise Google pour trouver une solution, mais le seul résultat utilisable que j'ai trouvé à

SET ANSI_PADDING OFF 
GO 

Je l'ai fait (donc je mis en ANSI_PADDING avant que je commencé à importer et le mettre de retour quand j'avais fini), mais rien n'a changé. Oh, j'utilise NCHAR (255) comme type de champ. Si je coupe le contenu que je montre dans la grille de données, c'est bien, mais si possible, je voudrais éviter cette surcharge (après tout, je dois boucler TOUTES les lignes et colonnes affichées, et puisque je ' Je travaille avec beaucoup de données - quelques milliers de lignes - ce n'est pas la meilleure solution). Que devrais-je faire?

Merci beaucoup d'avance! Essayez NVARCHAR au lieu de NCHAR.

Répondre

4

Vous utilisez un nchar(255), soit une longueur statique de 255. Essayez de remplacer la colonne par nvarchar(255). Un code nchar(255) vous donnera toujours 255 caractères. Ceux qui ne sont pas utilisés sont remplis par des espaces (0x20 en ASCII aka un espace). nvarchar(255) va allouer 255 caractères lors de l'initialisation, mais seulement utiliser les caractères nécessaires.

Dans ce cas, vous voulez nvarchar(255), puisque vous avez une chaîne de longueur variable.

+0

Merci beaucoup! – ShdNx

1

NCHAR est un champ de longueur fixe. L'utilisation de NVARCHAR comme type de données vous empêchera d'obtenir les espaces.

+0

Merci! Malheureusement, Eric a donné la réponse la plus détaillée, alors j'ai accepté sa réponse, mais vous avez aussi obtenu un +1. – ShdNx